2017-09-14 1 views
1

다소 이상한 요청 일 수 있습니다. 그러나 기본 매개 변수가있는 각 튜플을 Python 3에서 임의의 양만큼 튜플을 허용하도록하고 싶습니다.기본 매개 변수를 사용하여 여러 튜플 전달하기

우리 그룹에 스크립팅 기능을 쓰고 사용자가 쉽게 호출 할 수있는 방법을 원하기 때문에이 작업을 수행하고 싶습니다.

plot2D(('sweepvar1', start1, stop1, npts1=None, step1=None), 
     ('sweepvar2', start2, stop2, npts2=None, step2=None)) 

그래서 사용자는 본질적으로 어려움이오고이

plot2D(('var1', 0.0, 1.0, npts1=101), ('var2', 0.5, 0.6, step2=0.001)) 

같은 것을 호출 사용자가 2D 플롯 메소드를 호출하고자하는 경우 예를 들어, 나는 메소드 인수는 다음과 같이 할 사용자가 측정을 위해 포인트 또는 단계 크기의 수를 지정하고자하는 경우 선점을 알지 못하기 때문에 두 옵션을 모두 포함해야합니다. 이상적으로는 사용자가 두 변수를 모두 지정하지 않거나 nptsstep 중 하나를 선택하는 플래그 인 새 변수를 작성해야합니다.

나는 다소 default parameters, *args**kwargs에 익숙하지만 위의 문제에 대한 깨끗한 해결책을 찾지 못한 것 같습니다.

미리 도움을 청하십시오! 달성하기 어려운 것 같다

+1

이러한 것들은 명명 된 매개 변수를 포함하고 있기 때문에 튜플이 아닙니다 ... –

+0

은 (는) namedtuples와 유사합니다. –

+0

튜플이 아닌 사용자 지정 개체를 사용해야하므로 사용자가 모든 것을 제대로 초기화 할 수 있습니다. –

답변

2

있는 그대로 있지만 인수를 감싸고 각 튜플 위치 & 키워드 인수의 튜플을 생성하는 도우미 함수를 만들 수.

(('var1', 0.0, 1.0), {'npts1': 101}) (('var2', 0.5, 0.6), {'step2': 0.001}) 

이제 지루한 작업 plot2D에 그 인수를 처리하는 것이지만, 적어도 사용자는 명확 인터페이스를 가지고 : mkarg

def mka(*args,**kwargs): 
    return (args,kwargs) 

def plot2D(t1,t2): 
    print(t1,t2) 

plot2D(mka('var1', 0.0, 1.0, npts1=101), mka('var2', 0.5, 0.6, step2=0.001)) 

이 테스트 반환 (주장을) 것을 호출합니다.

대안 : 당신이 정말로이 튜플을 원하는 경우

, 당신은 당신의 튜플 매개 변수의 len을 확인하고, 길이가 충분하지 않은 경우 None 완료 할 수있다. 두 번째 "선택 사항"값이 첫 번째 값보다 덜 사용되면 좋습니다. 소량의 "선택적"값에 대해 실용적입니다.

def plot2D(tuple1,tuple2): 
    tuple1 += (None,)*(5-len(tuple1)) 
    tuple2 += (None,)*(5-len(tuple2)) 

plot2D(('var1', 0.0, 1.0, 101), ('var2', 0.5, 0.6, None, 0.001)) 
+0

오, 좋은 대안을 정말 좋아합니다! 나도 그걸 고려하지 않았어. 나는 'None'을 지정하도록 사용자에게 강요하는 것이 실제로 많은 오버 헤드를 발생시키지 않는다고 생각한다. – spaderdabomb

+0

재미있는 부분 : 이것은 내 첫 번째 답변 이었지만 삭제되었습니다 (키워드로 전달하는 것이 더 중요하다고 생각했기 때문에). –

관련 문제