Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 최상위 스크립트 환경(__main__)

<시간/>

모듈 개체는 다양한 속성을 특징으로 합니다. 속성 이름은 이중 밑줄 __로 접두어와 후단에 고정됩니다. 모듈의 가장 중요한 속성은 __name__입니다. Python이 최상위 실행 코드로 실행 중일 때, 즉 표준 입력, 스크립트 또는 대화형 프롬프트에서 읽을 때 __name__ 속성은 '__main__으로 설정됩니다. '.

>>> __name__
'__main__'

스크립트 내에서도 __name__ 속성 ​​값이 '__main__'으로 설정되어 있음을 알 수 있습니다. 다음 스크립트를 실행합니다.

'module docstring'
print ('name of module:',__name__)

출력

name of module: __main__

그러나 가져온 모듈의 경우 이 속성은 Python 스크립트의 이름으로 설정됩니다. hello.py 모듈의 경우

>>> import hello
>>> hello.__name__
hello

앞서 보았듯이 __name__의 값은 최상위 모듈에 대해 __main__으로 설정됩니다. 그러나 가져온 모듈의 경우 파일 이름으로 설정됩니다. 다음 스크립트 실행(moduletest.py)

import hello
print ('name of top level module:', __name__)
print ('name of imported module:', hello.__name__)

출력

name of top level module: __main__
name of imported module: hello

함수를 포함하는 Python 스크립트에는 특정 실행 코드가 있을 수도 있습니다. 따라서 가져오면 코드가 자동으로 실행됩니다. 두 가지 기능이 있는 이 스크립트 messages.py가 있습니다. 실행 부분에서 사용자 입력은 Thanks() 함수에 대한 인수로 제공됩니다.

def welcome(name):
print ("Hi {}. Welcome to TutorialsPoint".format(name))
return
def thanks(name):
print ("Thank you {}. See you again".format(name))
name = input('enter name:')
thanks(name)

분명히 message.py를 실행하면 아래와 같이 감사 메시지가 출력됩니다.

enter name:Ajit
Thank you Ajit. See you again

아래와 같은 moduletest.py 스크립트가 있습니다.

import messages
print ('name of top level module:', __name__)
print ('name of imported module:', messages.__name__)

이제 moduletest.py 스크립트를 실행하면 입력 문과 welcome() 호출이 실행되는 것을 알 수 있습니다.

c:\python37>python moduletest.py

출력

enter name:Kishan
Thank you Kishan. See you again
enter name:milind
Hi milind. Welcome to TutorialsPoint

이것은 두 스크립트의 출력입니다. 그러나 메시지 모듈에서 함수를 가져오고 싶지만 그 안에 있는 실행 코드는 가져오지 않습니다.

여기에서 최상위 스크립트의 __name__attribute 값이 __main__이라는 사실이 유용합니다. __name__이 __main__과 같은 경우에만 입력 및 함수 호출 문을 실행하도록 messages.py 스크립트를 변경합니다.

"docstring of messages module"
def welcome(name):
print ("Hi {}. Welcome to TutorialsPoint".format(name))
return
def thanks(name):
print ("Thank you {}. See you again".format(name))
if __name__=='__main__':
name = input('enter name')
thanks(name)

실행할 수 있고 가져올 수 있는 모듈을 원할 때마다 위의 기술을 사용하십시오. moduletest.py는 변경할 필요가 없습니다. 메시지 모듈의 실행 가능한 부분은 지금 실행되지 않습니다.

enter name: milind
Hi milind. Welcome to TutorialsPoint

이것은 당신이 messages.py 스크립트를 독립적으로 실행하는 것을 막지 않습니다.