2020년 8월 22일 토요일

[파이썬] 윤성우의 열혈 파이썬: 중급편, Story 15. 함수 호출과 매개변수 선언에 있어서 *와 **의 사용 규칙

Untitled
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 } )
11 12 13
1st  11
2nd  12
3rd  13 
------

21 22 23
1st  21
2nd  22
3rd  23 
------

21 22 23
1st  21
2nd  22
3rd  23 
------

a b c
1st  a
2nd  b
3rd  c 
------

1 2 [3, 4, 5]
1st  1
2nd  2
3rd  [3, 4, 5] 
------

x y z
1st  x
2nd  y
3rd  z 
------

-1 -2 -3
1st  -1
2nd  -2
3rd  -3 
------

-3 -2 -1
1st  -3
2nd  -2
3rd  -1 
------

팔로어