2017-05-17 7 views
2

은 내가 resize(h, w) 방법을 정의하려면, 나는 두 가지 방법 중 하나를 호출 할 수 있도록하려면 :이전 인수를 기반으로 기본 인수 값을 정의하는 방법은 무엇입니까?

  1. resize(x,y)
  2. resize(x)

경우, 두 번째 호출에서, I yx과 같아야합니다. 나는 방법 정의에서이 작업을 수행 할 수 있습니다 또는 나는 resize(x,y=None) 같은 것을해야하고 내부를 확인하지 :

if y is None: 
    y = x 
+2

예, '없음'코드가 선호됩니다. –

답변

2

내가

번호 메소드 정의시 메소드 정의에서이 작업을 수행 할 수 있습니다 더있다 실행 시간에 x 값이 있음을 알 수있는 방법. 기본 인수는 정의 시간에 한 번 평가되며 y의 동적 값을 저장할 방법이 없습니다.

가 아니면 resize(x,y=None) 그런 짓을 정확히

내부 확인해야합니다. 이것은 파이썬에서 일반적인 관용구입니다.

+0

Thx! 그러나 나는 함수에 다른 인자가 전달 된 것을 보도록 지시합니다. _resize (x, y = argv [1]) _와 같은 방식으로 C에서 메인과 닮았습니다. – CIsForCookies

+1

@CIsForCookies 당신은 그런 것을 할 수 있지만, 메소드가 정의 될 때만 평가 될 것입니다. 모든 호출에 대해 다시 평가되지 않습니다. –

2

짐의 답변을 완료하려면 None이 매개 변수 값으로 유효한 경우 가변 길이 인수 기능 (위치 및/또는 키워드)을 사용할 수 있습니다. 위치에 대한 사용 예 :이 예에서

def resize(x,*args): 
    if args: 
     if len(args)>1: 
      raise Exception("Too many arguments") 
     y = args[0] 
    else: 
     y = x 

, 당신은 x을 통과해야하지만, 당신은 0 이상의 추가 위치 인수를 전달할 수 있습니다. 물론 수동으로 확인해야하며 y 키워드를 잃어 버릴 수 있습니다.