몇 가지 공통 입력을 가진 함수와 그것들에 고유 한 함수를 가진 함수 모듈이 있습니다. 예 :파이썬에서 * args 사용법
func_list = [func_a, func_b, func_c]
windows = ['1D', '5D']
params = ['', hist, (25, 'T')]
for i_func, func in enumerate(func_list):
class_obj = class_X(A,B,func)
for window in windows:
args = (window, params[i_func]) # params is a list or tuple of other params for funcs e.g.
class_obj.run_func(args)
을 그리고 다른 모듈
class class_X(object):
def __init__(self, a, b, func_to_run):
self.a = a
self.ts = b
self.method = func_to_run
def generate_output(self, *args):
return self.method(self.ts, args) # time series is common and fixed for all, other params differ or change
나는 기능이 생각하기 때문에 위의 코드는 작동하지 않을 것이다에 : 나는 다음과 같이 루프에서이 기능을 실행하려고
def func_a(time_series, window ='1D'):
def func_b(time_series, window ='1D', availability_history):
def func_c(time_series, window ='1D', max_lag=25, use_probability ='T'):
내가 부르고있는 것은 고정 된 정의 된 매개 변수를 갖기보다는 *args
을 사용하기 위해 변경해야합니다.
나는 입력 된 매개 변수의 수를 알 수없는 함수를 의미한다고 생각하지만 입력 된 매개 변수의 수를 알고 있지만 루프의 여러 함수에 따라 다를 경우이 함수를 사용하려고합니다.
함수 모듈을 수정할 필요가없고 필요한 모든 매개 변수를 단일 개체 (e.g. list or tuple
)로 전달할 수있는 문제가 있습니까?
편집 -
macromoonshine의 응답 상태 I는 다음과 같이 kwargs로 사용할 수 있습니다 :
def generate_output(self, **kwargs):
return self.method(self.ts, kwargs)
을이 수정 사용하면 (generate_outputs를 호출 할 수 있습니다) 다음과 같이 인스턴스
x.generate_outputs(window ='1D', max_lag=25, use_probability ='T')
곳 XIS을 클래스 X
내가 향상시킬 수 있도록 향상시킬 수 있습니까? 루프의 조회 값으로 time_series 및 window를 제외한 args.
params = (30, "F")
x.generate_outputs(window, *params)
을하지만 당신은 임의의 키워드 매개 변수를 허용하는 대신 **kwargs
를 사용할 수있는 오류를
TypeError: generate_output() takes 1 positional argument but 4 were given
키워드 인수를 찾으십시오. '** kwargs' – flakes