2016-06-13 2 views
0

이 예제에서는 선택적 인수가있는 함수가 있습니다. 예 :선택적으로 파이썬에서 함수 인수를 어떻게 지정합니까?

def func_x(arg_foo='foo'): 
    # Do something 
    pass 

함수를 호출하는 동안 특정 조건에서만 인수를 지정하고 싶습니다.

이렇게하는 방법 중 하나입니다.

if cond == True: 
    func_x(arg_foo='coo') 
else: 
    func_x() 

그러나 (실제로는 boto3의 DynamoDB의 쿼리 기능입니다) 내가 가지고있는 실제 예를 들어 내가 특정 조건을 지정하고 싶습니다 많은 선택적 인수가 있습니다.

나는 선택의 여지가 있다면 다음을 수행하지 않으려는 것 : 나는 시도했다

if condition_a: 
    long_func_call(many_optional_argument_names=many_optional_argument_values) 
elif condition_b: 
    long_func_call(many_optional_argument_names=many_optional_argument_values) 
elif condition_c: 
    long_func_call(many_optional_argument_names=many_optional_argument_values) 
else: 
    long_func_call(many_optional_argument_names=many_optional_argument_values) 

을 다음 그러나 그것은 작동하지 않았다 :

long_func_call(
    arg1='' if cond_a else 'value', 
    arg2=None if cond_b else 'value' 
) 

내가 '기능을 m calling는 선택적 인자에 대한 입력으로 '' '' '' '' ''None을 받아들이지 않습니다.

특정 조건에서 선택적 인수를 지정할 수있는 방법이 있습니까?

답변

4
kwargs = {} 
if condition_a: 
    kwargs['arg_a'] = value_a 
if condition_b: 
    kwargs['arg_b'] = value_b 
... 
long_func_call(**kwargs) 

키워드 인수를 사용하십시오.

0

당신은 람다를 사용할 수

if cond: 
    func = lambda:func_x(arg_foo='coo') 
else: 
    func = func_x 
func() 
관련 문제