일반적으로 함수에 이렇게 매개변수를 지정해서 

함수를 호출할 때 매개변수 칸에 자신이 원하는 숫자를 넣으면 결과가 바르게 나온다.

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

+ Recent posts