본문 바로가기
잡다한 코딩 노하우/Python

python에서 *과 **의 의미

by lucian 2021. 11. 3.

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

이렇게 써주면 된다. 대신 파라미터들의 자리는 지켜줘서 넣어줘야 한다.

댓글