In [1]:
# -*- encoding : utf-8 -*-
# 함수 호출 시, dict 매개변수 앞에 ** 를 사용하여 dict의 values 를 전달할 때 주의하여야 할 사항
#
# 1) 함수 정의에 있는 매개변수의 갯수와
# 함수 호출 시, 전달하는 dict 매개 변수의 구성 요소 갯수가 같아야 함. ( 쉬움 )
#
# 2) 함수 정의에 있는 매개변수의 이름들과
# 함수 호출 시, 전달하는 dict 매개 변수의 key 이름들이 같아야 함. ( 책의 앞 부분에 설명되어 있으나 91 page 에서 강조가 안 되어 있음. )
#
# who_2 함수의 정의에 매개변수 이름은 ( c, b, a ) 임.
#
# 해당 함수 호출 시,
# who_2( **{ 'a' : -1, 'b' : -2, 'c' : -3 } )
# key 이름과 동일한 매개변수에 각 value 가 전달됨.
def who ( a, b, c):
print( a, b, c)
print( "1st ", a)
print( "2nd ", b)
print( "3rd ", c, "\n------\n")
def who_2 ( c, b, a):
print( c, b, a)
print( "1st ", c)
print( "2nd ", b)
print( "3rd ", a, "\n------\n")
list_3 = [ 11, 12, 13 ]
who( *list_3 )
who( *[21, 22, 23 ] )
who( *(21, 22, 23 ) )
who( * "abc" )
who( * [ 1, 2, [ 3, 4, 5 ] ] )
# dictionary 를 전달할 경우,
# func( * dict ) 하면 , key 값이 풀어서 매개변수에 할당한다.
who( *{ 'x' : -1, 'y' : -2, 'z' : -3 } )
# dictionary 를 전달할 경우,
# func( ** dict ) 하면 , value 값이 풀어서 매개변수에 할당한다.
# who( **{ 'x' : -1, 'y' : -2, 'z' : -3 } ) # 이렇게 하면 dict의 key 가 함수 매개변수 이름과 달라서 안 된다.
who ( **{ 'a' : -1, 'b' : -2, 'c' : -3 } )
who_2( **{ 'a' : -1, 'b' : -2, 'c' : -3 } )