2017-05-24 2 views
0

파이썬에서 조건부로 인수를 전달하는 방법이 있습니까 (파이썬 2.7을 사용합니까?)?파이썬 함수 호출의 조건부 인수

예를 들어,이 코드는 사전에 세 번째 인수가 있는지에 따라 2 또는 3 개의 인수를 제공합니다.

if "arg3" in my_dict: 
    my_method(
     my_dict[arg1], 
     my_dict[arg2], 
     my_dict[arg3], 
    ) 
else: 
    my_method(
     my_dict[arg1], 
     my_dict[arg2], 
    ) 

이렇게 쓰면 과장된 것처럼 보입니다. 그것은 가져 오기를 필요로하고 읽기 어려운로, 하나

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument(my_dict[arg1]) 
parser.add_argument(my_dict[arg2]) 
if arg3 in my_dict: 
    parser.add_argument(my_dict[arg3]) 
args = parser.parse_args() 

my_method(args) 

나는이 방법처럼 정말 안 : 나는 다음과 같이 것이라고 생각 argparse에 관한 정보를, 보았다.

같은 것을 할 수있는 방법이 있나요 : 간단하고 깨끗한 것

my_method(
    my_dict[arg1], 
    my_dict[arg2], 
    my_dict[arg3] if arg3 in my_dict, 
) 

아니면 누락하고 다른 방법은?

+0

내 답변이 도움이 되었습니까? – e4c5

답변

2

당신은 그런 식으로 호출 할 수 있습니다 :

my_method(my_dict[arg1], my_dict[arg2], my_dict.get(arg3, None)) 
당신은이에 대한 적응하기 위해 my_method을 변경할 수 있습니다

; 아마도 def my_method(*args):과 같은 것일 수 있습니다.

.get() 사전 방법에 대한 자세한 내용은 this을 참조하십시오.

이 솔루션은 @ e4c5에서 제공하는 것보다 분명히 uglier (Python 표준에 부합 함)이지만 함수 변수가 사전 키와 동일한 이름을 요구하지 않습니다.

0

@ Ev.Kounis와 @ e4c5 모두 좋은 답변을 제공합니다. 질문에서 한 시도만큼 유효한 조건식이 누락되었습니다.

my_method(
    my_dict[arg1], 
    my_dict[arg2], 
    my_dict[arg3] if arg3 in my_dict else None, 
) 

사실상 말하면, @ Ev.Kounis가 제안한 것과 동일합니다.

0

대안으로, 매번 dict을 전달할 것이라는 것을 안다면 dict을 가져 오는 my_method를 변경하는 것을 고려할 것입니다.

def my_method(d): 
    a1 = d[arg1] 
    a2 = d[arg2] 
    a3 = d[arg3] if 'arg3' in d else None 
    ... 

그렇지 않은 경우 다른 답변도 유효합니다.

관련 문제