2017-12-19 19 views
0

그래서 저는 약간의 코드를 작성하고 있었고 재귀 적으로 정의 할 때 전달 된 변수를 기반으로하는 기본 변수가있는 메소드를 가질 수 없다는 것을 알아 냈습니다. 표면 수준의 연구는 파이썬이 컴파일시 선언하도록 요구하고 있습니다. 따라서 다음은 허용되지 않습니다.파이썬에서 불만족시 선언해야하는 기본 매개 변수와 관련된 어떤 방법이 있습니까?

def foo(bar, potato = bar*bar): 

     if(bar is 0): return potato 
     potato -= bar 
     return foo(bar-1, potato) 

코드는 hogwash입니다. 그러나 그것이 효과가 있다면 그것은 되돌아 올 것입니다 (bar * (bar-1))/2.

나는 감자를 간단히 수동으로 전달할 수 있다는 것을 알고 있지만, 전역 또는 초기에 감자를 사용하지 않고이 작업과 비슷한 것을 만드는 다른 방법이 있습니까?

답변

0

자주 보이는 패턴을 구성하는 다음 줄을 따라 sth을 수행 할 수 있습니다. 기본 매개 변수 None을 확인하고 내부에 적절한 경우 종속 값으로 기능을 설정 :

def foo(bar, potato=None): 
    if potato is None: 
     potato = bar * bar 
    if bar == 0: 
     return potato 
    potato -= bar 
    return foo(bar-1, potato) 

을 그리고 당신은 라인 욕심이 있다면 당신은 삼항 if-else 연산자를 사용할 수 있습니다

def foo(bar, potato=None): 
    potato = bar * bar if potato is None else potato 
    return potato if bar == 0 else foo(bar - 1, potato - bar)