그것에 대해 설명하기 전에 if __name__ == '__main__'
무엇이 무엇인지 이해하는 __name__
것이 중요합니다 .
무엇입니까 __name__
?
__name__
A는 DunderAlias은 -와 비슷한 방식으로 글로벌 (모듈에서 액세스) 변수와 작품으로 간주 할 수 있습니다 global
.
type(__name__)
(yielding <class 'str'>
) 으로 표시되는 문자열 (위에서 언급 한 것처럼 전역 )이며 Python 3 및 Python 2 버전 모두에 대한 기본 제공 표준입니다 .
어디:
스크립트에서만 사용할 수있을뿐만 아니라 인터프리터와 모듈 / 패키지에서도 찾을 수 있습니다.
통역사:
>>> print(__name__)
__main__
>>>
스크립트:
test_file.py :
print(__name__)
를 야기하는 __main__
모듈 또는 패키지 :
somefile.py :
def somefunction():
print(__name__)
test_file.py :
import somefile
somefile.somefunction()
를 야기하는 somefile
패키지 또는 모듈에서 사용될 때 __name__
파일 이름을 사용합니다. 실제 모듈 또는 패키지 경로의 경로는 제공되지 않지만이 __file__
를 허용 하는 자체 DunderAlias 가 있습니다.
당신은 어디에, 볼 수 __name__
는 주 파일이고, (또는 프로그램)됩니다 항상 반환 __main__
, 그것은 다른 파이썬 스크립트 떨어져 실행하는 모듈 / 패키지 또는 아무것도 경우, 파일의 이름을 반환 곳을 에서 유래했습니다.
연습:
변수는 값 을 덮어 쓸 수 있음을 의미하고 ( "can"은 "should"를 의미하지 않음) 값을 덮어 쓰면 __name__
가독성이 떨어집니다. 어떤 이유로 든 그렇게하지 마십시오. 변수가 필요한 경우 새 변수를 정의하십시오.
항상의 값이 있다고 가정 __name__
할 __main__
또는 파일의 이름입니다. 이 기본값을 다시 변경하면 더 많은 혼란이 발생하여 더 나은 결과를 얻을 수 있습니다.
예:
>>> __name__ = 'Horrify' # Change default from __main__
>>> if __name__ == 'Horrify': print(__name__)
...
>>> else: print('Not Horrify')
...
Horrify
>>>
일반적으로 if __name__ == '__main__'
스크립트 를 포함하는 것이 좋습니다 .
이제 대답합니다 if __name__ == '__main__'
:
이제 우리는 __name__
사물 의 행동 이 더 명확 해짐을 알고 있습니다 :
가 if
소정 값이 참인 경우 실행하는 코드 블록을 포함하는 유동 제어 문이다. 가져온 파일 이름이나 파일 이름 을 __name__
사용할 수
있음을 확인했습니다 __main__
.
이는 __name__
같으면 __main__
파일이 기본 파일이어야하며 스크립트로 가져온 모듈이나 패키지가 아니라 실제로 실행 중이거나 인터프리터 여야합니다.
실제로 __name__
값을 취하면 __main__
해당 코드 블록에있는 모든 것이 실행됩니다.
이것은 실행중인 파일이 기본 파일 (또는 인터프리터에서 직접 실행중인 경우)이면 해당 조건을 실행해야 함을 알려줍니다. 패키지 인 경우 패키지가 아니어야하며 값은이 아닙니다 __main__
.
모듈 :
__name__
모듈에서 모듈의 이름을 정의하는 데 사용될 수도 있습니다
변형 :
다른 덜 일반적이지만 유용한 작업을 수행하는 것도 가능합니다 __name__
.
파일이 모듈 또는 패키지 인 경우에만 실행 :
if __name__ != '__main__':
# Do some useful things
파일이 기본 파일 인 경우 하나의 조건을 실행하고 그렇지 않은 경우 다른 조건을 실행하십시오.
if __name__ == '__main__':
# Execute something
else:
# Do some useful things
또한 라이브러리를 정교하게 사용하지 않고도 패키지 및 모듈에서 실행 가능한 도움말 기능 / 유틸리티를 제공하는 데 사용할 수 있습니다.
또한 명령 줄에서 모듈을 기본 스크립트로 실행할 수 있으므로 매우 유용 할 수 있습니다.
if __name__ == "__main__":
블록 상태가 더 이상 사용되지 않습니다 / 파이썬 3까지로 폐기? 나는 그것을 진술하는 정보를 찾았습니다.