Python/2.7 information

*args, **kwargs

qkqhxla1 2015. 3. 1. 12:31

source : https://freepythontips.wordpress.com/2013/08/04/args-and-kwargs-in-python-explained/


에서 유용한 내용을 일부 추려서 정리함.


*args의 예시.

# -*- encoding: cp949 -*-
def test_var_args(f_arg, *argv):
    print "first normal arg:", f_arg,", type(*argv) =",type(argv)
    for arg in argv:
        print "another arg through *argv :", arg
    for i in range(len(argv)):
        print argv[i]

test_var_args('yasoob','python','eggs','test')



위 실행결과를 보면 알겠지만, 인자의 갯수를 가변적으로 변경할수 있는것 같다. 첫번째 인자 뒤의 인자들은 전부 튜플로 만들어져서 *argv에 저장된다. 그리고 저런식으로 사용이 가능하다. 


**kwargs의 예시.

# -*- encoding: cp949 -*-
def greet_me(**kwargs):
    print 'type(kwargs) =',type(kwargs)
    if kwargs is not None:
        for key, value in kwargs.iteritems():
            print "%s == %s" %(key,value)
 
greet_me(name="yasoob",age=19,height=180.0,country='korea')



실행결과를 보고 추측할 수 있는건, **형식으로 받은 인자는 사전 형식이며, 역시 *args와 마찬가지로 가변길이의 인자를 받을 수 있다. 


그럼 이번엔 둘이 같이 써보자.

# -*- encoding: cp949 -*-
def some_func(fargs, *args, **kwargs):
    print fargs
    for ar in args:
        print ar
    for key,value in kwargs.iteritems():
        print key,'=',value

some_func(10,'args1','args2','args3','args4',hoho1='2',rara='haha')



대충 사용법을 알아냈다. 연습하면서 알아낸 사실은 **변수에 인자로 줄 시 1='2' 이런식으로 키값이 단순하게 숫자가 되면 식이 안된다는 에러가 뜨면서 안된다. 변수처럼 보이게 rara1이런식으로 문자와 이어 줘야 하는것 같다.