라이브러리의 함수에 자신이 만든 함수를 지정하고,
args=() 로 Extra arguments to pass to function. 넘겨주어야 할 때가 있다.
아마도, scipy에서 함수를 정의할 때
*args와 **kwargs를 이용해서 unlimited number of argument를
넘겨 받도록 함수를 정의하였을 것이다.
그러나 만약 extra argument가 keyword argument라면?
def myfunc(x,y,a=1,b=2): # y,a,b are optional arguments
if y > 1.0:
c = (1.0+b)**a
else:
c = (1.0+a)**b
return c*x
(1) 모든 argument를 positional argument로 넘기기.위 함수를 libary에서 사용할때 다음과 같이 extra argument y,a,b를
positional parameter로 넘겨준다.
libfunc( myfunc, x, args=(y,a,b))
(2) 다음과 같이 wrapper를 만들어서 넘겨주는 방법이 있다.
(또는 global variable로 정의해서 넘겨주거나.)
def mywrapper(*args, **kwargs): # args for y, kwargs for a, b
def func(x):
return myfunc(x, *args, **kwargs)
return func
myfunc_with_args = mywrapper(2.5, a=4.0, b=5.0)
integral = integrate.romberg(myfunc_with_args, 1, 10)
(3) 그러나 이 경우에는 언제나 wrapper를 한번 불러 주어야 한다는 불편함이 있다.
keyword argument를 한번에 args=() 로 넘겨주는 방법은 없을까?....?
==> Scipy 함수의 argument는 positional argument에만 적용되고 keyword argument로는
쓸 수 없다. 따라서 (1)번이나 (2)번 방법만 가능하다.
댓글 없음:
댓글 쓰기