일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 채팅
- Props
- MongoDB
- flask
- crud
- docker
- NeXT
- 중급파이썬
- wetube
- S3
- SAA
- merge
- lambda
- 튜플
- RDS
- TypeScript
- Vue
- AWS
- EC2
- socket io
- dict
- git
- pandas
- async
- node
- SSA
- Class
- 카톡
- react
- 파이썬
- Today
- Total
초보 개발자
15강 함수 호출과 매개변수 선언에 있어서 *와 **의 사용규칙 본문
[iterable 객체와 매개변수]
이번에 살펴 볼내용 4가지를 정리하면 다음과 같다.
func(*iterable) iterable 객체를 전달하면서 *을 붙여서 함수 호출할 때
func(**dict) dict 객체를 전달하면서 **을 붙여서 함수 호출할 때
def func(*args) 함수를 정의하면서 매개변수 args에 *붙일 때
def func(**args) 함수를 정의하면서 매개변수 args에 **붙일 때
먼저 다음 두가지에 대해 살펴보려고한다. 이 둘은 객체를 전달하는 과정에서 언패킹이 진행되는 상황이다.
(리스트, 튜플, 문자열 모두 iterable 객체이다.)
*를 묶는다로 이해하면 되는데 푼다라고 해석하는 경우가 한 경우 있다.
이는 함수 호출 할 때 인자로 전달할 경우이다 ex ) a = (a , b) func(*a) = func(a,b)
func(*iterable) 이 경우에는 푼다 !
def func(*args) 이 경우에는 묶는다 !
def who(a,b,c):
print(a, b, c, sep = ', ')
who(*[1,2,3]) # 리스트를 풀어서 매개변수에 각각 전달
1, 2, 3
who(*(0.1,0.2,0.3)) # 튜플을 풀어서 매개변수에 각각 전달
0.1, 0.2, 0.3
who(*'abc') # 문자열을 풀어서 매개변수에 각각 전달
a, b, c
다음은 func(**dict)의 형태로 딕셔너리를 전달하는 예이다. 그런데 func(*iterable)의 형태로 딕셔너리를 전달하는 예도 보이고 있다. (딕셔너리도 iterable 객체이다. 키를 반환하는 iterable객체이다.)
def who(a, b, c):
print(a, b, c, sep =', ')
d = dict(a=1,b=2,c=3)
who(*d) # 이렇듯 *을 붙이면 키가 매개변수에 전달된다.
a, b, c
who(**d) # 이렇듯 **을 붙이면 값이 매개변수에 전달된다.
1, 2, 3
그렇다면 키와 값을 튜플로 묶어서 함수에 전달하려면 어떻게 해야할까??
def who(a,b,c)
print(a,b,c, sep=', ')
d = dict(a=1.b=2.c=3)
who(*(d.items())) # 이전에 설명했던 items 함수를 호출해서 뷰 객체를 얻는다.
('a',1), ('b',2). ('c', 3)
뷰 객체도 iterable 객체이므로 *을 붙이는 경우 리스트에 *를 붙이는 경우와 동일한 형태의 결과를 얻게 된다.
[딕셔너리와 매개변수]
함수 정의와 관련이 있는 다음 두 가지에 대해 살펴보려고 한다.
def func(*args) 값들이 튜플로 묶여서 args에 전달된다.
def func(**args) 전달되는 내용이 딕셔너리로 묶여서 args에 전달된다.
먼저 def func(*args) 형태의 함수 정의가 갖는 의미를 보이겠다. 이 매개변수 선언에 *를 붙이면 전달되는 값들이 모두 하나의 튜플로 묶여서 매개변수 args에 전달된다.
def func(*args):
print(args) # args는 튜플
func() #빈 튜플이 전달되는 형태
()
func(1) # 1이 튜플로 묶여서 전달
(1,)
func(1,2) #1과 2가 튜플로 묶여서 전달
(1,2)
func(1,2,3)
(1,2,3)
무조건 하나의 튜플로 묶는다.
def func(**args):
print(args) #args는 딕셔너리
func(a = 1) # {'a':1} 생성되어 args에 전달
{'a':1}
func(a=1,b=2) # {'a':1,'b':2} 생성되어 args에 전달
{'a':1,'b':2}
func(a=1,b=2,c=3)
{'a':1,'b':2,'c':3}
**args는 딕셔너리로 묶겠다고 했으니까 키와 값 쌍으로 인자에 전달해야 할 것이다. 그러므로 a=1과 같은 형태로 보내주어야 한다!!
def func(*args1, **args2):
print(args1) #args1은 튜플
print(args2) #args2는 딕셔너리
func()
()
{}
func(1,a=1)
(1,)
{'a':1}
func(1,2,a=1,b=2)
(1,2)
{'a':1,'b':2}
'Python > 윤성우 열혈 파이썬' 카테고리의 다른 글
17강 dict & OrderedDict (0) | 2021.12.24 |
---|---|
16강 dict & defaultdict (0) | 2021.12.24 |
14강 dict의 루핑 기술과 컴프리헨션 (0) | 2021.12.22 |
13강 dict의 생성과 zip (0) | 2021.12.22 |
12강 네임드 튜플 (0) | 2021.12.22 |