잡다한 코딩 노하우/Python
python에서 *과 **의 의미
lucian
2021. 11. 3. 14:41
def function(*args): 로 함수의 파라미터 안에 *이 들어간 것을 가끔 볼 수 있다.
이것은 매개변수가 몇 개 들어올지 모를 때 쓰인다.
보통 def function(a):를 하면 매개변수로는 변수 a하나만 들어간다.
그러나 들어오는 매개변수가 하나가 아니고 가변적으로 변할 때 *을 쓰는 것이다.
def function(*args):
print(args)
function('asdf')
function('asdf',123,'asdfdfdsf')
# 결과
#('asdf',)
#('asdf', 123, 'asdfdfdsf')
이렇게 매개변수가 하나가 아니라 여러개가 들어갈 때 쓰인다.
def function(**kwargs): 그럼 또 **은 뭐냐?
이것도 앞의 *과 같은 기능에 추가로 딕셔너리 형태로 매개변수를 받는다는 것이다.
코드설명이 더 이해가 쉽다.
def function(**kwargs):
print(kwargs)
function(nn='asdf',aa=123)
# 결과
#{'nn': 'asdf', 'aa': 123}
function(123)
# 결과
# TypeError: function() takes 0 positional arguments but 1 was given
이처럼 key와 value값의 형태로 인자가 들어가게 된다.
대신 key가 없는 파라미터는 오류를 발생시킨다.
그럼 key없는 파라미터와 key가 있는 파라미터들을 동시에 쓸려면,
def function(*args,**kwargs):
print(args)
print(kwargs)
function(123,'asdf', aa=1,bb='asdf')
# 결과
#(123, 'asdf')
#{'aa': 1, 'bb': 'asdf'}
function(aa=1,bb='asdf','ASDF',1234)
# 결과
# SyntaxError: positional argument follows keyword argument
이렇게 써주면 된다. 대신 파라미터들의 자리는 지켜줘서 넣어줘야 한다.