일반적으로 함수에 이렇게 매개변수를 지정해서
함수를 호출할 때 매개변수 칸에 자신이 원하는 숫자를 넣으면 결과가 바르게 나온다.
def func_01(x, y, z = 0):
return x + y + z
s = func_01(10,20)
print(s)
그런데 매개변수를 정해놓지 않는 방법이 있는데 이건
가변 인수(Arbitrary Argument)방식이라고 한다.
이건 예를 들어, 리스트, 딕셔너리, 세트 등을 매개변수로 사용할 경우 전달 개수를 미리 알 수 없을 경우 자주 사용한다.
def func_01(*args):
print(args)
return sum(args[0])
result = func_01([x for x in range(1,11)]) # list argument
print(f"func_01 함수 호출 결과: {s}")
이런 식으로 쓸 수 있는데
그런데 여기서 한 가지 잘못된 점이 있다. 이걸 출력하면 원소가 리스트인 튜플로 출력이 되는데 이렇게 말고
그냥 튜플로 나오게 하기 위해서는
def func_01(*args):
print(args)
return sum(args)
result = func_01(*[x for x in range(1,11)]) # list argument
print(f"func_01 함수 호출 결과: {s}")
이런식으로 함수를 호출할 때 함수의 괄호 안 매개변수가 되는 리스트나 튜플 앞에 *을 붙여주면 된다.
튜플이 아닌 딕셔너리 형태로 전달하기 위해서는 함수의 파라미터 앞에 **을 써주면 된다.
def func_01(**kwargs):
print(kwargs)
func_01(name = "Tom Crise", born = "Syracuse, New York, U.S", age =58)
func_01(my_car = "Pony", type = "used car")
a_dict = {"my_car": "Pony", "type": "used car"}
func_01(**a_dict)
함수도 역시 객체가 가능하며, 파라미터로 넘겨주는 게 가능하다.
def hello():
print("안녕하세요")
def say(foo):
foo()
say(hello)
함수가 객체가 가능하니 당연하게도 리스트 또는 튜플 원소로 함수명 사용이 가능하다.
def plus(x, y):
return x+y
def minus(x,y):
return x-y
f1 = (plus, minus) # tuple
f2 = [plus, minus] # list
print(f1, f2)
'프로그래밍 > Python' 카테고리의 다른 글
Python - 재귀함수 (0) | 2023.10.14 |
---|---|
Python - 모듈, 예외처리 (1) | 2023.10.14 |
Python - Lambda함수 (0) | 2023.10.08 |
Python 문제 - 학생들 점수 합 및 평균 구하기 (0) | 2023.10.08 |
Python 문자열 정렬, set (0) | 2023.10.08 |