[python] Python에서 파일 끝에 함수 선언

먼저 완전히 정의하지 않고 함수를 호출 할 수 있습니까? 이것을 시도 할 때 ” function_name is not defined” 오류가 발생 합니다. 나는 C ++ 배경에서 왔기 때문에이 문제는 나를 괴롭힌다.

작동하기 전에 함수 선언 :

def Kerma():
        return "energy / mass"

print Kerma()

그러나 먼저 정의하지 않고 함수를 호출하려고하면 문제가 발생합니다.

print Kerma()

def Kerma():
    return "energy / mass"

C ++에서 함수 앞에 헤더를 배치하면 호출 후에 함수를 선언 할 수 있습니다.

여기에 뭔가 빠졌나요?



답변

파이썬에서 일종의 관용적 인 방법은 다음과 같이 작성하는 것입니다.

def main():
    print Kerma()

def Kerma():
    return "energy / mass"

if __name__ == '__main__':
    main()

이렇게하면 main마지막에 함수를 계속 호출하는 한 원하는 순서대로 코드를 작성할 수 있습니다 .


답변

Python 모듈 (.py 파일)이 실행되면 그 안에있는 최상위 명령문이 나타나는 순서대로 위에서 아래로 (시작에서 끝까지) 실행됩니다. 즉, 정의 할 때까지 참조 할 수 없습니다. 예를 들어 다음은 표시된 오류를 생성합니다.

c = a + b  # -> NameError: name 'a' is not defined
a = 13
b = 17

다른 언어와는 달리 defclass문에서 실행 가능한 파이썬 아니라 당신이 참조 할 수 없습니다 단지 선언적-있도록 하나 a또는 b그이 발생하고 정의 전까지. 이것이 첫 번째 예제에 문제가있는 이유입니다. 명령문이 실행되고 본문이 처리되고 결과 함수 개체가 함수 이름에 바인딩 Kerma()되기 전에 함수를 참조 def하므로 스크립트의 해당 지점에서 정의되지 않습니다.

C ++와 같은 언어로 된 프로그램은 일반적으로 실행되기 전에 사전 처리되며이 컴파일 단계 동안 전체 프로그램과 #include참조하는 모든 파일을 한 번에 읽고 처리합니다. Python과 달리이 언어는 사용하기 전에 함수의 이름과 호출 시퀀스 (또는 정적 유형의 변수)를 선언 (정의되지 않음) 할 수있는 선언적 명령문을 제공하므로 컴파일러가 해당 이름을 발견 할 때 확인하기에 충분한 정보를 갖습니다. 주로 유형 검사 및 유형 변환을 수반하며 실제 내용이나 코드 본문을 아직 정의 할 필요는 없습니다.


답변

이것은 파이썬에서 가능하지 않지만 솔직히 말하면 곧 필요하지 않다는 것을 알게 될 것입니다. 코드를 작성하는 Python 방식은 프로그램을 클래스와 함수를 정의하는 모듈과 다른 모든 것을 가져와 실행하는 단일 “주 모듈”로 나누는 것입니다.

간단한 폐기 스크립트의 경우 끝에 “실행 가능 부분”을 배치하는 데 익숙해 지거나 대화 형 Python 셸을 사용하는 방법을 배우십시오.


답변

Python은 동적 언어이며 인터프리터는 항상 변수 (함수, …)의 상태를 호출 할 때 그대로 가져옵니다. 일부 if 블록에서 함수를 재정의하고 매번 다르게 호출 할 수도 있습니다. 그래서 호출하기 전에 정의해야합니다.


답변

기꺼이 C ++처럼되고 함수 내에서 모든 것을 사용하려는 경우. 다음과 같이 파일 하단에서 첫 번째 함수를 호출 할 수 있습니다.

def main():
    print("I'm in main")
    #calling a although it is in the bottom
    a()

def b():
   print("I'm in b")

def a():
   print("I'm in a")
   b()

main()

그런 식으로 파이썬은 먼저 전체 파일을 ‘읽은’다음 실행을 시작합니다.


답변