>백엔드 개발 >파이썬 튜토리얼 >`if __name__ == '__main__':`은 Python에서 무엇을 하며 왜 중요한가요?

`if __name__ == '__main__':`은 Python에서 무엇을 하며 왜 중요한가요?

Patricia Arquette
Patricia Arquette원래의
2024-12-24 03:52:14750검색

What Does `if __name__ ==

name == "__main__"은 무엇이며 왜 필요한가요?

Python 스크립트가 메인 프로그램으로 실행될 때 , 인터프리터는 특수 변수 __name__을 "__main__"에 할당합니다. 다른 프로그램에서 스크립트를 모듈로 가져오는 경우 __name__은 가져오는 모듈의 이름으로 대신 설정됩니다.

이것이 중요한 이유를 이해하려면 다음 예를 고려하세요.

# Suppose this is foo.py.

print("before import")
import math

print("before function_a")
def function_a():
    print("Function A")

print("before function_b")
def function_b():
    print("Function B {}".format(math.sqrt(100)))

print("before __name__ guard")
if __name__ == '__main__':
    function_a()
    function_b()
print("after __name__ guard")

실행 흐름:

  1. 특수 변수 설정:

    • name은 이후 "__main__"으로 설정됩니다. foo.py가 메인으로 실행됩니다. 프로그램.
  2. 코드 실행:

    • 스크립트는 모든 코드를 한 줄씩 실행합니다.

      • "가져오기 전"을 인쇄하고, 수학 모듈을 로드하고, 등.
      • function_a 및 function_b 함수를 정의합니다.
    • name 검사가 평가됩니다. "main"과 일치하므로 if 블록이 실행되면("Function A" 및 "Function B 인쇄) 10.0").
    • name 아래 코드 확인이 실행됩니다("after name__guard" 인쇄).

이름의 중요성 확인:

이 확인이 중요한 이유는 다음과 같습니다.

  • 우발적인 호출로부터 보호: foo.py에 이름이 없는 경우 확인하세요. 모듈로 가져오면 가져오기 스크립트의 명령줄 인수를 사용하여 스크립트가 실행됩니다. 이는 일반적으로 바람직하지 않습니다.
  • Pickle 파일 문제: foo.py에 피클 파일에 저장된 사용자 정의 클래스가 있는 경우 다른 스크립트에서 이를 피클 해제하면 foo.py를 가져오고 없이 해당 코드가 실행됩니다. 이름을 확인하면 위와 같은 문제가 발생합니다.

추가 참고:

  • 한 스크립트에서 name 검사를 여러 개 가질 수 있지만 이는 일반적이지 않습니다.
  • name은 "a1", "m1", "a2", "b"에 포함된 결과를 확인합니다. "a3", "m2", "t2", 이름을 제거하는 동안 "a1", "a2", "b", "a3", "t2"가 확인됩니다.
  • foo3.py를 스크립트로 실행하면 "t1", "a1", "a2", "b", "a3", "t2"가 발생하고 모듈로 가져옵니다. 아무 것도 실행되지 않습니다.
  • foo4.py에서 __name__을 "__main__"으로 설정하면(모듈로 가져온 경우에도) __name__ == __main__이 항상 True로 평가되므로 가져올 때 스크립트가 항상 실행된다는 의미입니다.

위 내용은 `if __name__ == '__main__':`은 Python에서 무엇을 하며 왜 중요한가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.