python 함수의 매개변수(parameter) 특징 - 기본값 & 가변형 매개변수
파이썬의 독특한 매개변수 parameter의 특징! <기본값 설정하기 & 가변형 매개변수>
함수의 매개변수 parameter
- 함수 내부에서 만든 코드에서 필요한 값을 전달해야 할 때, 이를 매개변수로 받을 수 있다
-
함수를 호출(call) 할 때 매개변수를 전달할 수 있고, 전달된 값은 함수에서 정의된 변수에 담긴다
-
parameter는 1) 없을 수도 있고, 2) 여러 개가 있을 수도 있으며, 3) 크기나 형태가 넘겨줄 때 결정될 수도 있다
def funcParameter(a, b) : print('parameter:',a,b) funcParmeter(10,20) # parameter: 10 20 funcParameter('Hello', 'Hi') # parameter: Hello Hi
- 호출할 때 정의된 매개변수의 개수만큼 값을 전달해야 한다 (기본값이 정의되어 있지 않다면)
1) 기본 값
-
기본값을 설정해놓으면, 함수 호출 시 값을 전달하지 않았을 경우, 기본값이 매개변수에 저장된다
def fun1(a=1, b=2, c=3) : print(a,b,c) fun1(6,2,8) # 6 2 8 fun1(2,4) # 2 4 3
- 매개변수의 개수에 맞게 전달된다면 전달된 값이 변수에 저장된다
- 개수에 맞지 않게 값을 전달 -> c에 설정되어 있던 기본값 3이 변수에 저장된다
-
모든 변수에 기본값을 주지 않을 거라면, 기본값이 설정되지 않은 매개변수가 앞쪽에 와야 한다
def fun1(a=2, b, c) # 에러 _ 기본값이 설정되지 않은 b와 c가 앞쪽에 와야 함 def fun1(a, b=1, c=5) # 바르게 작성 _ 1,1,5
- 매개변수의 이름으로 값을 지정하고 호출하기
-
함수를 호출 할 때, 값을 순서대로 적지 않고 매개변수의 이름을 적고 값을 전달 할 수도 있다
-
기본값이 설정되지 않은 변수가 앞쪽에 와야 하고, 한 변수에 중복해서 값을 넣을 수 없다
fun1(b=3, a=4, 1) # 에러 _ 기본값이 정의되지 않은 변수가 앞에 와야 함 fun1(a=1, 3, c=5) # 에러 _ 기본값이 정의되지 않은 변수가 앞에 와야 함
fun1(2, b=1, a=3) # 에러 _ a에 중복된 값 2, 3이 들어갔고, c에 해당하는 값이 없음
fun1(10, c=2, b=7) # 10, 7, 2 fun1(a2=1, a1=4) # 4,1,3 _ c는 기본값이 들어감
2) 가변형 매개변수
- 함수 호출 시 넘겨주는 값에 따라 형태가 결정되는 매개변수
- 값으로 몇 개를 넘겨줘야 할 지 모를 때 사용한다
- 리스트 & 딕셔너리
-
파이썬은 모든 변수들이 객체라서 리스트와 딕셔너리 등등을 그대로 넘겨줘도 된다
-
리스트
def sumAllelements(list1) : result = 0 for num in list1 : result += num return result exampleList = [1,2,3,4,5] print(sumAllelements(exampleList)) # 15
-
딕셔너리
def dictionary(dic) : for key, value in dic.items() : print(f"{key} : {value}") exampledic = {'a' : 10, 'b' : 20} dictionary(exampledic)
- 리스트 포인터*
-
리스트의 주소값을 넘겨준다
-
리스트를 직접 넘기는 것과의 차이 : 개발자가 직접 리스트를 입력해서 넣는 것이 아니라 컴퓨터가 실행하면서 자기가 리스트를 만들어서 넣는 다는 점!
def sumAllpointer(*list1) : return sum(list1) # 방법 1 example = [1,2,3,4,5] sumAllpointer(*example) # 방법 2 sumAllpointer(1,2,3,4,5)
- 딕셔너리 포인터**
-
리스트 포인터와 달리 ** 두 개!
# 방법 1 def dicPointer1(**dic) : for key, value in dic.items() : print(f"{key} : {value}") dic1 = {'a' :1, 'b':2, 'c':3} dicPointer1(**dic1)
# 방법 2 def dicPointer2(**dic) : for key, value in dic : print(f"{key} : {value}") dicPointer2(a1=10) dicPointer2(b1 = 10, b2 =20, b3 = 49)
3) 가변형 매개변수 작성 순서 및 규칙
순서!!
- 일반변수, 일반변수 …. 리스트형 매개 변수, 딕셔너리형 매개 변수
규칙
-
섞여 있을 경우, 일반 매개 변수를 먼저 작성
-
리스트 포인터 매개변수가 먼저, 그 다음에 딕셔너리 포인터 매개변수
def fun1(*a1, **a2, a3, a4) : print(a1, a2, a3, a4, sep="\n") # 에러 _ 일반 변수를 앞에 써야 해
def fun2(**a3, *a4) : print(a3, a4, sep="\n") # 에러 _ 리스트형 매개변수가 먼저!!
def fun3(a1, a2, *a3, **a4) : print(a1, a2, a3, a4, sep="\n") # 바른 순서!
-
같은 종류의 포인터 가변형 매개변수를 여러 개 사용할 수 없음! ( 리스트포인터 / 딕셔너리포인터는 한 번씩만 사용 가능 )
def fun4(*a, *b) : print(a,b) # 에러 _ 같은 종류의 포인터 가변형 매개변수를 사용할 수 없음
def fun5(a, b, *c) : print(a,b) list1 = [1,2,3] list2 = [4,5,6] list3 = [7,8,9] fun5(list1, list2, *list3) # 바른 작성 _ 리스트 포인터 한 번 사용
Comments