**kargs 는 unlimited number of keyword argument values 에 사용한다.
예:
def func(x, *args, **kargs):
print('first argument : '+x)
for i in args:
print('next argument :, i)
for key,value in kargs.iteritems() :
print( '%s == %s'%(key,value))
여러개의 argument를 한번에 넘겨주고 싶을 때 다음과 같이
container를 이용하는 방법을 사용할 수 있다.
예를 들어서 다음과 같은 함수에 대해서
def avg3(a,b,c):
... return (a+b+c)/3.0
avg3( *(4,5,7) )
이 경우 하나의 3-tuple을 분해해서 3개의 argument로 받아들이게 된다.
(2) keyword arguments as dictionary
>>> d={ 'a':5, 'b':6, 'c':9 }
>>> avg3( **d ) 6.666666666666667
이 경우 dictionary를 분해해서 3개의 keyword argument로 받아들인다.
(3) mix both
>>> avg3( 2, b=3, **{'c':4} ) 3.0
한편, 일반적인 함수를 이용하여 계산하는 subroutine을 만들때, 기본적인 변수 이외의 extra argument를 사용할 수 있도록 하려면 어떻게 할까? 예를 들어 일반적인 f(x)꼴의 함수를 (-1,1)사이에서 적분하는 subroutine을 만들었는데, 함수에 다른 변수 f(x, a=1,b=2) 의 a,b를 바꾸고
처음에 적분함수를 정의 할 때, def integration(func,args=()): 로 정의하고
함수 func을 func(x,*args)로 사용하면 된다. 이때, extra arguments는 tuple로 passing.
댓글 없음:
댓글 쓰기