티스토리 뷰
파이썬에서의 packing의 개념과 예제에 대해 알아보고자 한다.
<목차>
- 패킹(packing)
1) 기본 packing
2) *를 통한 packing
2-1) 매개변수에서의 *사용
2-2) 함수에서의 * 사용
패킹(packing)
하나의 변수에 여러 개의 데이터를 할당하는 것 -> 묶는다!
1) 기본 packing
직관적인 pakcing으로, 오른쪽에 위치한 iterable 데이터을 하나의 변수에 할당하는 작업이다.
# list packing
list_p = [1, 2, 3]
print(list_p) # [1, 2, 3]
# tuple packing
tuple_p = ('홍길동', 240515)
print(tuple_p) # ('홍길동', 240515)
tuple_p = '홍길동', 240515 # 튜플 패킹 시, 소괄호 없어도 됨
print(tuple_p) # ('홍길동', 240515)
2) *을 통한 packing
2-1) 매개변수에서의 *사용
하나의 변수에 데이터들이 할당하는 경우도 있지만,
데이터와 변수의 개수가 경우에는 다음과 같이 num1, num2, num3 순서에 맞게 1, 2, 3이 들어간다.
하지만 위와 같은 변수는 3개인데 원소 값이 5개인 코드는 어떻게 해결할까?
즉, 값이 변수보다 더 많을 경우에는 ??
이때 *를 사용한다.
*의 기능은 "*가 없는 변수가 할당받고, 남은 값들(할당받지 못한 값)을 모아서 리스트로 만드는" 기능을 한다.
예를 들어, num2 앞에 *를 붙혔으면, num1과 num3가 할당받고 남은 값들을 리스트 형태로 할당받는다.
num1, *num2, num3 = [1,2,3,4,5]
print(num1) # 1
print(num2) # [2, 3, 4]
print(num3) # 5
만약, num3에 *를 붙혔으면, num1과 num2가 할당받고 남은 값들을 리스트 형태로 할당받는다.
num1, num2, *num3 = [1,2,3,4,5]
print(num1) # 1
print(num2) # 2
print(num3) # [3, 4, 5]
+)참고
매개변수에는 *를 한번만 사용가능하다. 두 번 사용 시, 아래와 같이 syntaxError가 난다.
num1, *num2, *num3 = [1,2,3,4,5]
print(num1)
print(num2)
print(num3)
2-2) 함수에서의 *사용
함수에서의 * 사용은
앞서 매개변수에서의 * 사용과 다르다!
def func(num1,num2,*num3):
print(num1) # 1
print(num2) # 2
print(num3) # (3, 4, 5)
func(1,2,3,4,5)
num3의 출력값이 리스트 형태가 아니라 튜플 형태이다.
그리고, num2에 *를 사용하였을 때, 매개변수에서는 [2, 3, 4]로 출력이 되었다.
그럼 함수에서의 사용에서는 어떨까?
def func(num1,*num2,num3):
print(num1)
print(num2)
print(num3)
func(1,2,3,4,5)
다음과 같이 keyword-only argument라는 TypeError가 난다.
+) 참고사항 [바로가기]
keyword-only argument는 FunctionName(paramName = value,...) 형태고,
Positional-only argument는 FunctionName(value1, value2, ....) 형태를 의미한다.
그럼 Positional-only argument를 이용할 때 위와 같이 가운데에 *를 사용하면 안되고, 가장 마지막에 와야한다!
그럼 만약 가운데에 꼭! *를 사용하고 싶을 때는 어떻게 해야할까요?
def func(num1,*num2,num3):
print(num1) # 1
print(num2) # (2, 3, 4)
print(num3) # 5
func(1,2,3, 4, num3=5)
Positional-only argument를 지정해서 사용하면 된다.
관습적으로 함수에서 *를 사용할 때는 *num3가 아니라, *args 형태로 사용된다.
*args: argument를 묶어서 튜플 형태로 전달하는 것이다.
개수가 정해지지 않은 다수의 인자가 전달되면, 이 값들을 모두 묶어서 한개의 튜플 자료형으로 만드는 것이다.
즉, 복수의 인자값들을 받을 경우에 사용된다.
def func(num1,num2, *args):
print(num1) # 1
print(num2) # 2
print(args) # (3, 4, 5)
func(1,2,3, 4, 5)
*args에 대해서 더 알고싶다면 [바로가기]
'파이썬' 카테고리의 다른 글
[Python 파이썬] *args와 **kwargs 개념과 예제 (0) | 2024.05.16 |
---|---|
[Python 파이썬] 언패킹(unpacking) 개념과 예제 (0) | 2024.05.16 |
[Python 파이썬] eval() 함수: '수식' 연산 (0) | 2024.05.15 |
[Python 파이썬] replace() 함수: '문자열 치환' (0) | 2024.05.15 |
[Python 파이썬] map 함수: '일괄 적용' (0) | 2024.05.15 |
- Total
- Today
- Yesterday
- 앤드류응
- NumPy
- 숏코딩
- 손실함수
- 파이썬
- *args
- numpy 배열 생성
- 경사하강법
- sorted
- omp: error #15
- 11870
- Sort
- action value function
- state value function
- baekjoon
- policy function
- Andrew Ng
- numpy 배열 속성
- 강화학습
- computation graph
- 비용함수
- 딥러닝
- 로지스틱 회귀
- 강의노트 정리
- **
- python
- *
- 백준
- adrew ng 머신러닝 강의
- **kwargs
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |