2012-06-22 3 views
4

나는 간단한 함수를 가지고 있는데, 나는 myFunction이라고 부를 것이다. 두 개의 매개 변수를 사용하여 매개 변수를 계산하고 결과를 반환합니다.파이썬 함수가 같은 파일에있을 때 정의되지 않은 이유는 무엇입니까?

나는 또한이 같은 헤더가 생성자가있는 클래스, MyClass을 가지고

:

__init__(self, bar, fun=myFunction): 

나는이 수업 시간에 아무것도 실행하려고, 나는 다음과 같은 오류 얻을 :

MyClass 
    def __init__(self, bar, fun=myFunction): 
NameError: name 'myFunction' is not defined 

이 클래스를 제거하면 myFun을 Python 셸에서 사용할 수 있습니다. 그렇다면 거래가 무엇입니까?

+0

해결책으로 적절한 답을 표시하십시오. 우리는 문제를 편집하여 해결책이 무엇인지 말하지 않고 그러한 방식으로 해결책을 선택합니다. – Tadeck

답변

10

확실하지 않으므로 실제 코드를 표시하지 않았지만 myFunctionMyClass 후에 정의됩니다. __init__ 메소드가 정의 될 때 디폴트 값 표현식이 평가되므로 해당 시점에 myFunction을 정의해야합니다. 나중에 정의하는 것은 너무 늦습니다.

+0

와우, 네 말이 맞아. 내가 한 일은 myFunction을 잘라내어 붙여 넣기 만하면 MyFunction이 그 파일에 있고, 이제는 모든 것이 괜찮습니다. 파이썬은 이상합니다. 감사. – user1123936

+0

+1 정확합니다. 비슷한 결과를 얻으려면'None' (또는 다른 것은 필요하지만 정의되어 있어야합니다.)을 기본 인수로 지정하고 나중에 비교하고 결국 myFunction 함수를 할당합니다.이 함수는 메서드가 실제로 호출 될 때 평가됩니다. – Tadeck

+1

@ user1123936 : 파이썬은 내가 아는 것 중 가장 간단하고 (가장 강력하지는 않다는 의미는 아님) 가장 쉽고 일관된 프로그래밍 언어 중 하나입니다. 아마도 그는 위의 모든 것에서 첫 번째 일 것입니다. 그래서 당신이 더 나은 것을 언급 할 수 있다면, 나는 매우 감사 할 것입니다. 정말로. – Tadeck

-6

myFunction은 변수가 아니며 값이 아니므로 기본 매개 변수로 사용할 수 없습니다.

아마 선언 된 함수의 이름 대신 람다 함수를 기본 매개 변수로 사용할 수 있습니다.

+0

다른 프로젝트에서도 똑같은 일을했습니다. MyClass와 myFunction은 실제로 거기에서 복사되고 붙여 넣어집니다. – user1123936

+3

-1 : 물론 틀렸어. (여기에 : "_ ... 변수는 값이 아니기 때문에 기본 매개 변수로 사용할 수 없다."). 기본 인수로 원하는 것을 사용할 수는 있지만 기본 인수를 언급 한 함수 (기본 인수를 언급 한 함수)가 정의 될 때 평가됩니다. – Tadeck

관련 문제