"만약 어떤 높여줍니까 name = " main" '책임질래?;;:
# Threading example
import time, thread
def myfunction(string, sleeptime, lock, *args):
while True:
lock.acquire()
time.sleep(sleeptime)
lock.release()
time.sleep(sleeptime)
if __name__ == "__main__":
lock = thread.allocate_lock()
thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock))
thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))
파이썬 인터프리터 소스 파일을 읽을 때마다 두 가지 않습니다.
# Suppose this is foo.py.
print("before import")
import math
print("before functionA")
def functionA():
print("Function A")
print("before functionB")
def functionB():
print("Function B {}".format(math.sqrt(100)))
print("before __name__ guard")
if __name__ == '__main__':
functionA()
functionB()
print("after __name__ guard")
파이썬 소스 파일을 판독합니다 eventtest 인터페터 때 먼저 몇 가지 특별한 변수에. 이 경우, 우리가 관심을 name '대한' 변수.
python foo.py
인터프리터는 는 ',', '을 직접 문자열이어야 할당하십시오 " main" name' 변수 (예:
# It's as if the interpreter inserts this at the top
# of your module when run as the main program.
__name__ = "__main__"
# Suppose this is in some other main program.
import foo
이 경우, 'foo.py', 스트립 파일_이름 인터프리터는 사용자 모듈에서는 대해 살펴보도록 하겠습니다 ', 그리고 그 문자열을 할당할지 .py 끕니까' s ', 즉' 가변으로 name 데이터베이스에구성원을 module& # 39.
# It's as if the interpreter inserts this at the top
# of your module when it's imported from another module.
__name__ = "foo"
= 이후 특별한 변수가 설정, 인터프리터는 실행하므로 한 번에 모든 코드를 모듈에서는 기술서임을. 다른 면에 창을 열 수 있는 샘플 코드를 사용할 수 있습니다 수 있도록 따라 이같은 설명은.
수학 = import (math" ";) "'
# What gets printed if foo is the main program
before import
before functionA
before functionB
before __name__ guard
Function A
Function B 10.0
after __name__ guard
<! - 언어: > 랑 없음 -;
# What gets printed if foo is imported as a regular module
before import
before functionA
before functionB
before __name__ guard
after __name__ guard
이 사람은 당연히 그녀의심장을 이유를 알 수 있습니다. 때론 운영까지도 쓸 수 있는 '.py' 파일을 이용하여 다른 프로그램 및 / 또는 모듈에서는 모듈로 모두 실행할 수 있으며, 또한 기본 프로그램에 따라 할 수 있다. 예를 들면 다음과 같다:
너회의 모듈은 라리브러리 할 수 있지만, 일부 it 런입니다 유닛 테스트 또는 데모 스크랩트 모드입니다.
너회의 모듈에서는 메인 프로그램은 경우에만 사용되고 있지만 아직 테스트 프레임워크를 일부 유닛 테스트 및 특수 테스트 및 실행 파일을 가져오기하여 .py '는' 좋아하는 스크립트입니다 총괄하였습니다. # 39 너회가 don& 스크립트입니다 it& # 39, s, t want it to 실행하십시오 해서 임포트하지 모듈에서는.
질문: 여러 '블록' name 확인 할 수 있습니까? 대답: 그러나 언어 won& it& # 39 의 이상한 사용자정의하려면 # 39, t stop 있습니다.
'Foo2.py' () 는 다음과 같은 경우를 가정해 봅시다. 'Foo2.py' 의 파이썬 말하도다 명령줄이 않으면 어떻게 될까요? 왜?
<! - 언어: 파이썬 - >.
# Suppose this is foo2.py.
def functionA():
print("a1")
from foo2 import functionB
print("a2")
functionB()
print("a3")
def functionB():
print("b")
print("t1")
if __name__ == "__main__":
print("m1")
functionA()
print("m2")
print("t2")
<! - 언어: 파이썬 - >.
# Suppose this is foo3.py.
def functionA():
print("a1")
from foo3 import functionB
print("a2")
functionB()
print("a3")
def functionB():
print("b")
print("t1")
print("m1")
functionA()
print("m2")
print("t2")
# Suppose this is in foo4.py
__name__ = "__main__"
def bar():
print("bar")
print("before __name__ guard")
if __name__ == "__main__":
bar()
print("after __name__ guard")
스크립트입니다 실행될 경우, 그 명령을 전달하여 파이썬 인터프리터
python myscript.py
즉 모든 코드가 http://support. 밀어맞춤 레벨 0 가 처형되었다. 하지만 누구도, 뭐, 정의, 정의됩니까 함수와 클래스가 있는 그들의 코드를 실행하십시오 얻을 수 있다. # 39 주 () ',' s no there& 달리 다른 언어에서는 함수, 즉 '주 ()' 기능을 자동으로 얻을 수 있는 모든 코드 묵시적으로 실행하십시오 최상위 수준에.
이 경우, "만약 '톱 레벨 코드가 블록. '현재' 이 (가) 로 평가되는 있는 name 내장현 변수 이름을 모듈에서는. 그러나 모듈에서는 직접 실행되고 같이 'myscript.py' 위), '대신', ',' " main" 문자열이어야 name 어졌다면 설정됩니다. 이런 식으로 있는가에 의해 직접 또는 다른 것에 의해 가져오는 실행하십시오 스크립트입니다 테스트할 수 있는 테스트 중입니다.
if __name__ == "__main__":
...
다른 경우 등 다양한 기능과 스크립트입니다 가져오기됩니다 중입니다 모듈에서는 가져오기됨 및 그 최상위 클래스 정의를 그럼 바디입니다 '코드' 는 조항이 있지만 실행됨을 코드의 경우, 위 조건이 충족되지 않는 실행하십시오 won& # 39 로 수 없다. 고려해보십시오 기본으로 들어, 다음 두 스크립트:
# file one.py
def func():
print("func() in one.py")
print("top-level in one.py")
if __name__ == "__main__":
print("one.py is being run directly")
else:
print("one.py is being imported into another module")
< >! - -;;
# file two.py
import one
print("top-level in two.py")
one.func()
if __name__ == "__main__":
print("two.py is being run directly")
else:
print("two.py is being imported into another module")
이제, 이 경우 해석기에 호출하십시오
python one.py
출력물에는 될 것입니다.
top-level in one.py
one.py is being run directly
'Two.py' 대신 실행할 경우:
python two.py
확보하십시오
top-level in one.py
one.py is being imported into another module
top-level in two.py
func() in one.py
two.py is being run directly
따라서 '가' 는 ',', '한 때 모듈에서는 로드되었는지 name " one", 그 대신', ',' " main".
가장 간단한 설명 변수 (이럴) '의' name 다음과 같습니다.
다음과 같은 파일을 만들.
# a.py
import b
및
# b.py
print "Hello World from %s!" % __name__
if __name__ == '__main__':
print "Hello World again from %s!" % __name__
그들에게 이 출력입니다 호스팅하면서 얻을 수 있습니다.
$ python a.py
Hello World from b!
모듈에서는 가져와집니다 때 볼 수 있듯이, 파이썬 세트 글로벌 () ' [& # 39, name& # 39,] 을' 이 모듈에서는 module& # 39 의 이름. 또한 모든 코드를 모듈에서는 빛위에 가져오기의 실행되고 있습니다. "만약 '로 평가되는' 거짓 '를 통해 이 부분은 실행되지 않습니다.
$ python b.py
Hello World from __main__!
Hello World again from __main__!
파일이 실행될 때 볼 수 있듯이, 파이썬 세트 '글로벌 () [& # 39, name& # 39,]', ',' 이 파일의 " main". 이 시간, "만약 'true' 및 '로 평가되는 기술서임을 실행되고 있습니다.
>. # "만약, 어떤 높여줍니까 name " main" 책임질래? '=.
개략적으로 기본 사항:
글로벌 변수, name '의' 는 '& # 39, 프로그램, 즉 모듈에서는 진입점이 데이터베이스에구성원을 main& # 39,'. 그렇지 않으면 it& # 39 의 이름을 따라 임포트하십시오 모듈에서는.
따라서 코드 블록 '는' 에 그칠 경우 경우 실행하십시오 모듈에서는 진입점이 데이터베이스에구성원을 프로그램였어
It 를 통해 다른 모듈에서는 수입할 수 없이 실행 코드의 모듈에서는 의해 그 코드 블록 가져오기에서.
이 필요한 이유는?
def do_important():
"""This function does something very important"""
이 함수 호출 할 수 있습니다 테스트하려면 추가하기만 모듈에서는 to the bottom):
do_important()
그리고 그것을 운영하는 (의 명령 프롬프트) 와 같은 일이.
~$ python important.py
그러나 다른 가져오기할 스케쳐내 모듈에서는 스크립트입니다.
import important
이 때문에 ',' 기능은 # 39 라는 가져오기에서 do_important 약간만이라도 you& 설명줄로 너회의 함수 호출 () ',' do_important; d 맨 아래에 있는 것이다.
# do_important() # I must remember to uncomment to execute this!
변수 "name" 이 곳에서 발생하는 시점에 스크램블된 파이썬 인터프리터 이름공간이 가리킵니다.
그러나 δ1 주 모듈 (또는 상호대화식 파이썬 세션, 즉 interpreter& # 39 의 읽기, 평가, 인쇄 루프 또는 복제) 실행 중인 모든 변경분이 "main" ";".
만일 실행하기 전에 확인할 수 있습니다.
if __name__ == "__main__":
do_important()
위 코드에서 # 39 를 기본으로 하고, 그것을 운영하는 그칠 때 실행하십시오 you& 모듈에서는 (또는 의도적으로 다른 스크립트입니다 호츨 정보기술 (it).
S # 39, 파이썬, 어쨌든요 여기있을 there& 개선하는 방법
비즈니스 프로세스 외부에서 모듈에서는 실행하십시오 와일드링이 싶다?
우리가 원하는 것이 아니라 우리가 개발 및 테스트 코드를 두면 행사할 수 있는 기능을 '& # 39, 우리 이렇게 및 재동기화할 확인할지 main& # 39,' 직후.
def main():
"""business logic for when running this module as the primary one!"""
setup()
foo = do_important()
bar = do_even_more_important(foo)
for baz in bar:
do_super_important(baz)
teardown()
# Here's our payoff idiom!
if __name__ == '__main__':
main()
이제 말 최종 기능을 실행할 수 있다면 우리의 모듈에서는 모듈에서는 모듈에서는 실행하십시오 지목했다.
함수와 클래스가 모듈 및 그 수 있게 가져오기됩니다 실행하지 않고 또 다른 스크립트 "main" 함수를 호출할 수 있도록 모듈 (및 그 함수와 클래스가) & # 39 에서 실행할 때, 다른 ',' 모듈에서는 main& # 39 (예:
import important
important.main()
이 관용구 에서도 찾아볼 수 있습니다 'main 파이썬 문서에 대한 설명은' 모듈에서는. 해당 텍스트를 다음과 같은 뜻이 있다.
>. (그렇지 않으면 익명) 이 있는 이 모듈에서는 seabreeze 유효범위 >. interpreter 의 주요 프로그램 - 명령의세 실행하므로 으로부터 읽기 >. 표준 입력, 스크립트 파일에서, 호출하든 상호대화식 프롬프트합니다. 정보기술 (it) >. 어떤 환경에서 이 성어는 로만스였나 "조건부 스크립트입니다" 제 >. 스크립트입니다 실행하십시오 발생합니다.
>. # 39, & # 39 main& name 경우 =. >. 주 ()
',' 는 어떤 경우, # > name " main" 책임질래? =.
'은' name 전역 변수 () 에 대한 글로벌 고말은 파이썬, 실제로 [모듈에서는 레벨] [1]) 에 있는 모든 네임스페이스을. 이는 일반적으로 module& # 39 의 이름 (비호환성의 'str' 유형용).
그러나 파이썬 프로세스를 실행할 때 유일한 어떤 특수한 경우가 흔한데, mycode.py.
python mycode.py
그렇지 않으면 글로벌 이름공간이 & # 39 의 가치를 할당되었는지 '익명', ',' name main& # 39 있다.
따라서 등 최종 흐름선
if __name__ == '__main__':
main()
이를 통해 또 다른 장점은 chunghwa: 이에 따라 다른 스크립트 및 코드에 가져올 수도 있습니다 모듈에서의 실행하십시오 경우 프로그램에 메인 함수 언제 결정한다.
import mycode
# ... any amount of other code
mycode.main()
[1]: https://docs.python.org/tutorial/modules.html # 모듈에서는
여기에 다른 데 있는 것이 많아, 이 코드의 " How" 있지만, 어떤 문제가 있는 경우, 이 동네 사람들은, 이 때까지, Why" " 감지에서 가져다줄래요 가능하도록 했다. 특히 새로운 프로그래머가 도움이 되어야 합니다. 시행하십시오 " ab.py 파일 ";:
def a():
print('A function in ab file');
a()
(Xy.py) 및 두 번째 파일을 " ";:
import ab
def main():
print('main function: this is where the action is')
def x():
print ('peripheral task: might be useful in other projects')
x()
if __name__ == "__main__":
main()
>. 실제로 이 코드를 지정하십시오. 뭐하는거야? 'Xy.py', 'you' 가져오기의 실행할 때 ab. 가져오기의 즉시 '& # 39 기술서임을 런입니다 모듈에서는 가져오기에서 도왔으매' ab, xy '& # 39 의 나머지' s 운영체 프레젠테이션이든 전에 실행됩니다. It ',' ab 는 계속해서 'xy' 한 번 함께 끝냈다. 인터프리터는 재배케하여 스크립트에만 실행되고 있는 '' name 추적할 수 있습니다. # 39 라는 스크립트입니다 you& 관계 없이 실행할 때, ve, it ',' it - 인터프리터는 페이징됩니다 " main" # 39, & # 39 home& 정의마스터 또는 만들 수 있습니다. 외부 스크립트를 실행한 후 스크립트입니다 반품해야 된다.
위의 코드는 단계별로 let& # 39, s, s # 39 를 먼저 유니수테드 what& 이해하는 데 역점을 두고 있는 이 일이 보조선과 나타나는 순서대로 스크립트입니다. 즉, 함수 (또는 '정의' - # 39, 블록 don& 스스로 아무것도 할 때까지, re they& t # 39 라고 합니다. 만약 어떤 인터프리터는 지정값이 말하도다 자체에 대한 중얼 거렸다.
그러나 that& # 39 에 있는 스크립트입니다 can& # 39, 아마도 그 기능을 하기 때문에 외부에서 불렀으매 별로 없는 경우 즉시 시작할 것이라고 그것을했다 계산 및 변수 지정. # 39 하는 경우, 함수 re 및 가능성이 you& 재사용률이 밀접한 관련이 있을 정도로, 당신의 새 스크립트입니다 이전 방정식입니다 충돌하는 com/go/4e6b330a_kr. 독립 이전 사용자 활동을 통해 얻을 수 있는 능력, 분할 함수 호출 아웃해야 재사용률이 그들을 다른 영역으로 스크립트입니다. 예를 들어, example.py " "; xy.py " 지정값이 가져오기의 "; & # 39 를 활용하는 ',' x (), 콜 x& # 39;; 함수 (xy.py) 에서 " ";). (아마 it& # 39 의 세 번째 단어를 이용해 지정된 텍스트 문자열. 누마피 어레이입니다 생성하기에 목록에서 번호 및 제곱 그들을 애워싸노라 또는 디트 랜딩 3D 서피스입니다. 무한한 가능성을 있다.) (표시됨과 것 [이 질문] (https://stackoverflow.com/questions/23000075/purpose-of-if-name-main) 에 의해 결국 나를 이해할 수 있는 데 대한 답을 @kindall - 왜, 어떻게 않습니다. # 39 의 죄송합니다. it& 으로 표시되어 있는 복제본입니다 [이 번호요] (https://stackoverflow.com/questions/419163/what-does-if-name-main-do) 를 내가 생각하기에 의문이 생긴다.)
특정 명령문입니다 모듈에서는 ('M. py') 의 경우 우리가 원하는 대로 실행할 때 실행할 수 있고, ll, it& # 39 주 (아님 임포트한) 이 "만약 이러한 명령문입니다 배치하십시오 (테스트 케이스, 인쇄 명령문입니다) 에서 '블록.
기본적으로 따라 (주) 으로 실행할 때 아닌 모듈에서는 임포트된) 이 ',', ',' 가변입니다 name 설정되었습니다 " main" 언제 '' ll be 임포트했습니다 name 가변적입니다 it& # 39, 대부분의 다른 값을 얻을 수 있었을 (M& # 39, & # 39 ',') 의 이름을 모듈에서는. 이렇게 하면 다른 실행 모듈을 파생어를 함께 구성하고, 특정 입력을 분리하는 &. 또한 출력입니다 명령문입니다 테스트 케이스 있는지.
, & # 39, 이 경우, 한 마디로 '=' & # 39 name " main"; 블록 (일부) 에서 코드를 실행할 때 모듈에서는 막기 위해 가져와집니다.
간단히 말해, '은 각 변수' 에 대해 정의된 name 스크립트입니다 eventtest 나열할지 스크립트입니다 표시됨과 실행하십시오 임포트된 모듈에서는 또는 중입니다 주 모듈에서는 실행되고 있다.
만일 스크립트에만 두 가지가 있습니다.
#script1.py
print "Script 1's name: {}".format(__name__)
및
#script2.py
import script1
print "Script 2's name: {}".format(__name__)
이 출력입니다 script1 실행할 수 있다.
Script 1's name: __main__
그리고 출력입니다 script2 실행할 수 있다.
Script1's name is script1
Script 2's name: __main__
'우리' 를 통해 알 수 있듯이, # 39, & # 39 는 어떤 코드를 name main&. 모듈에서는. 이건 엄청난거야, 구조적 문제 같은 코드를 작성할 수 있기 때문에 걱정하지 않아도 그냥 및 위치, C/C++, & # 39, main& # 39, 파일이 구현하지 않습니다. 그런 다음 함수은 就不可能拥有 컴파일됨 표시됨과 실행가능파일 아웃하기로 않니다 라이브러리로 사용될 수 없다.
파이썬 스크립트를 작성할 말할 수 있는 유용한 기능을 구현하는 다른 용도로 적재량 큰 진실이며당신이 뭔가 않습니다. I want to use 임포트합니다 포락선으로 사용할 경우 그 스크립트는 실행하지 않고 그냥 내가 할 수 있으며 해당 프로그램 (점을 감안하면 코드에 ',' 내 경우. = " name 미디어만을 실행하므로 main" 컨텍스트로). 반면 in C/C++ 너회가 할 부분 아웃해야 별도의 모듈에서는 cerner 냥이라구 붙여넣습니다 그런 dm_ownerdm_owner 절실해졌습니다. 사진 아래 상황.
화살표가 가져오기의 링크. 각 3 모듈에서는 하는 6 가지 이전 모듈의 포함시키십시오 코드 파일 (9 명, 계산 구축상의 파일) 과 5 링크. 이 더욱 어려운 것이 아니라면, 특별히 다른 코드를 C 라이브러리로 컴파일됨 포함시키십시오 붙여넣습니다 프로젝트. 이제 사진 it for 파이썬.
모듈, 그리고 만약 누군가가 작성한 코드에서 변수 '를 사용하려는 가져와서 그들은 단지' name 분리하십시오 실행가능파일 부분에 있는 프로그램 라이브러리 부품 도울 수 있다.
예를 들어, 우리는 이 코드의 조지프:
...
<Block A>
if __name__ == '__main__':
<Block B>
...
A 와 B 는 블록 때 실행하십시오 운영하고, x.py" ".
때 아닌 B) 가 운영하고 있는 한 것이 아니라 블록 실행하십시오 다른 모듈에서는 y.py" "; 예를 들어, 어떤 스자리 가져와집니다 및 코드가 실행되기 거기서 (때 같은 기능을 x.py" "; 호출됨 이스피 에서).
파이썬 실행하면 로컬 변수 값을 할당되었는지 name 대화식으로 '' 'main'. 마찬가지로 Python 에서 실행할 때, 이를 다른 모듈에서는 모듈에서는 명령줄이 가져오는 것이 아니라 그 가치를 main ',' 보다는 '속성' name 배정됩니다 실제 이름은 모듈에서는. 이런 식으로 자신의 가치를 스스로 결정할 수 있는 '봐' name 모듈에서는 그들이 어떻게 사용되고 있는지, 다른 프로그램 또는 기본 응용 프로그램 실행 명령줄에서 지원 기능도 있다. 따라서 다음 관용구 파이썬 모듈 찾아볼 수 없다.
if __name__ == '__main__':
# Do something appropriate here, like calling a
# main() function defined elsewhere in this module.
main()
else:
# Do nothing. This module has been imported by another
# module that wants to make use of the functions,
# classes and other useful bits it has defined.
고려해야 합니다.
if __name__ == "__main__":
main()
이 경우 '는', '는 파이썬 스크립트를 name 특성을 " main",'. 즉, 만약 프로그램이 실행되기 때문에 프로그램 자체가 main 실행됨을 적립율은 '속성' (이 경우는 '주 ()' 기능을).
그러나 모든 코드 '는 파이썬 스크립트를 사용하는 경우, 외부에서 모듈에서는 경우,', '=' 기술서임을 실행됨을 _name " _main" 사용할 경우, 그래서 그냥 여부를 확인할 수 있는 프로그램 코드를 실행할 수 있으며 따라서 여부를 결정하는 방관하겠나 모듈에서는 이용되고 있다.
, 지정하십시오. > name '?'
5 - [둥데라리아스] '는' name 전역 변수로 생각할 수 있습니다. (http://powerlink 모듈) 와 유사한 방식으로 작동됨 '글로벌'.
이는 문자열으로 (글로벌 위에서 설명한 바와 같이 (name) 에 의해 '유형' (중에서 # 39, & # 39, str& > <, 클래스 ',') 및 백업이었습니다 붙박이 standard for both 파이썬 3 와 파이썬 2 버전.
하지만 모두 사용할 수 있는 것이 아니라 스크립트에만 통역 및 모듈에서는 / 패키지 에서도 찾아볼 수 있습니다.
>>> print(__name__)
__main__
>>>
Script:*
test_file.py *:
print(__name__)
그 결과 'main'
, somefile.py
def somefunction():
print(__name__)
import somefile
somefile.somefunction()
그 결과 '섬필레'
'또는' 는 것을 볼 때 패키지로의 모듈에서는 name 사용되는 파일 이름을. 실제 모듈에서는 경로 또는 패키지 경로는 제공되지 않지만 그 자체의 둥데라리아스 file 사용할 수 있는 ',' 이.
가장 중요한 위치에 있는 볼 수 있습니다. ',' name 파일 (또는 프로그램) 가 '및' 항상 복귀하십시오 main 경우, 또는 어떤 다른 파이썬 스크립트를 실행하는 오프하도록 모듈에서는 / 패키지 파일 이름을 가지고 있는 반환되므로 에서 유래했다.
, # 39 의 값을 수 있다는 것을 가변으로 it& 덮어쓰여질 (" can"; " should" 의미하지는 않습니다.;;) '의 가치를 덮어쓰므로 name 가독성을 부족' 가 됩니다. 어떤 이유로든 그것을하지 말라. 필요할 경우 가변으로 새 변수를 정의합니다.
항상 '가치' 수 '또는' main name 것으로 파일 이름을. 이러한 변경에 따라 심화될 것이라고 선을 거역한다면 기본값입니다 다시 한 번 더 아래쪽으로 할말이다 문제가 발생할 수 있습니다.
>>> __name__ = 'Horrify' # Change default from __main__
>>> if __name__ == 'Horrify': print(__name__)
...
>>> else: print('Not Horrify')
...
Horrify
>>>
이 경우 일반적으로 = & # 39 를 고려되는지 좋습니다 ',' 에서 # 39, main& 포함시키십시오 name 스크립트입니다.
& # 39, "만약 지금 >, , # 39 main& 오토메이티드 name = '
[Ui_policytable_java_spe_policy "만약 '] [4] 는 기술서임을 흐름 제어 코드 블록 포함된 것은 주어진 값 경우 시행할 예정이다. 우리는 볼 수 있는 '' name 인컨텍스트 시행하십시오 main 파일 이름을 '또는' 에서 가져온 것으로 알려졌다.
이 경우, 즉 '같음' 다음 'name main' 이 될 하며 주 파일 실행 파일이 있어야 합니다 (또는 centera 는 interpreter) 또는 패키지가 아닌 모듈에서는 가져오기됩니다 스크립트입니다.
'가치' 는 '다음' main 있는모든 시행하십시오 name 랑하니 경우 그 코드 블록 실행됩니다.
이 경우 가장 중요한 것임을 시사하고 파일 실행 파일 (또는 에서 실행 중인 통역사 직접) 그 찼음을 autoexec. 합니다. 그런 것이 아니다, 않을 경우 '가치' main 패키지로의 한다.
'name 모듈에서는 모듈에서는 정의하십시오 이름을' 에서도 사용할 수 있습니다
또 다른 작업을 수행할 수 있지만, 일부 내아기마저도 쇼 '와' name 덜 흔한 유용한 것 같습니다
if __name__ != '__main__':
# Do some useful things
if __name__ == '__main__':
# Execute something
else:
# Do some useful things
실행 가능한 도움말에서는 패키지 및 모듈을 제공하는 it 기능을 사용할 수도 있습니다 / 유틸리티를 사용할 수 없는 정교한 라이브러리보다는.
또한 모듈을 통해 실행할 수 있는 매우 유용한 명령줄이 등 주요 스크립트에만 할 수도 있다.
'name': 모든 모듈에서의 name '는' 라는 특수 속성이 있다. 이는 내장현 변수의 이름을 되돌려줍니다 모듈에서는.
'main': (가) 와 같은 다른 프로그래밍 언어에서, 파이썬, 즉, 너무 엑서큐션 진입점이 주. # 39, & # 39 main& ',' 있는 최상위 코드 이름은 유효범위 실행하므로 . 파이썬 모듈에서는 기본적으로 두 가지 방법을 사용할 수 있습니다. 바로 실행하십시오 스크립트로 또는 가져옵니다. 그 때 ',' 로 설정되어 있다 '는 실행하십시오 모듈에서는 스크립트입니다 name main'.
따라서 값이 설정되어 있다 '는' 때 '속성' name main 모듈에서는 실행하십시오 기본 프로그램. 그렇지 않으면 '가치' 로 설정되었습니다 name 모듈에서는 이름을 포함합니다.
이 때 대한 특수 파일의 이름은 irm-dctm. Python 에서 명령줄입니다. 이 주 () 는 일반적으로 부르는 데 사용되는 " "; 예를 들어, 함수 또는 적절한 시작 코드 (startup code) 와 같은 다른 실행하십시오 코먼드라인 인수만 취급료.
여러 가지 방법으로 기록되었으므로 걸릴 수 있다. 또 다른 이유는.
def some_function_for_instance_main():
dosomething()
__name__ == '__main__' and some_function_for_instance_main()
하지만 이런 일을 하는 것 "이라며" i am not 콩지름에 운영 코드를 확인할 수 있는 일은 아무 것도 없다고 " magical"; # 39, & # 39 name 경우 약 ',' = main&. 파이썬 함수를 호출하는 것은 좋은 규칙을 의 기본 파일.
있는 여러 가지 변수가 시스템 (파이썬 인터프리터) 는 소스 파일 (모듈). 그 값을 얻을 수 있으며, 언제든지 알려 운영까지도 도왔으매 강조하십시오 name 가변으로 / 속성:
파이썬 소스 코드 파일, 이 모든 코드가 실행될 때 로드되는지 http://support. 항목이없습니다. 참고로 이 doesn& # 39, t call 모든 방법 및 기능을 않지만, 이 파일에 정의된 정의하십시오.)
인터프리터는 소스 코드 파일 실행 전에 몇 가지 특별한 변수가 있지만, 해당 파일의 정의합니다. 이러한 특수 변수가 파이썬 소스 코드 파일이 자동으로 각 eventtest name 중 하나입니다.
Python 은 이 같은 기본 프로그램 소스 코드 파일이 로드중 경우 (즉, 파일을 실행할 때), 해당 변수 값을 가질 수 있는 이 파일에 대한 특별 세트 name ", main", .
이 경우 다른 모듈에서는 가져올 수 있는 # 39 의 이름으로, module& name 설정됩니다.
따라서 일부 너회의 예:
if __name__ == "__main__":
lock = thread.allocate_lock()
thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock))
thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))
코드 블록 것을 의미한다.
lock = thread.allocate_lock()
thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock))
thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))
실행됨을 실행하십시오 모듈에서는 경우에만 직접. 코드 블록 실행하지 않을 경우 다른 모듈에서는 / 가져오기 때문에 같은 것을 요구하고, main" " name 가치를 않습니다. 이 특정 인스턴스입니다.
이를 통해 희망을 초과됩니다.
"만약 main". '는 기본적으로 name = ", 환경, 통역, 최상위 스크립트입니다 지정하는 것으로 etlat (& # 39, 나는 가장 높은 우선 순위를 first& 실행될 # 39;).
if __name__ == "__main__":
# Execute only if run as a script
main()
스크램블된 파선-짧은 여러 점을 알아야 합니다.
'에서' 은 모든 작업을 실행할 수 있는 임포트합니다 실제로 " a";
1 점 때문에, 모든 것을 할 수 있는, a" " 실행하십시오 전혀 사용하지 않을 수도 있습니다. 이 때 임포트하지
문제를 해결할 수 있는 조건을 확인란 2 점, 파이썬 전환할 수 있습니다
'4' 는 모든 .py 모듈, 암시적입니다 가변으로 name. '때' 의 값은 앨프리 가져와집니다 name 앨프리 모듈에서는 파일 이름을 로 설정되었습니다 a" ";; 앨프리 실행될 때, 즉, 파이썬, 사용하여 직접 " a.py" 앨프리 name '는' 의 가치를 진입점이 관심용 앨프리 모듈에서는 문자열으로 main '' 로 설정되어 있습니다.
중요한 것은 특별한 at 는 파이썬 심아이엔큐 4 점! 기본적인 미삭 는 없다.
그 이유는
if __name__ == "__main__":
main()
주로 피하기 위해 [가져오기의 좉툑] (https://docs.python.org/2/library/threading.html # 로 가져오기 스레드한 코드) 문제가 비롯될 것이라고 [이 코드를 직접 임포트한] (https://stackoverflow.com/questions/46326059/). 주 () '을 실행 파일의 경우 직접 운영까지도' 는 호출되었을 (that& # 39 의 경우, ',' name = " main",) 는 신앙이니라 코드에 가져온 다음 주 수입국인 입력할 수 있는 코드를 flashcopy 모듈에서는 임포트합니다 문제를 피하기 위해 잠급니다.
자동으로 사인온을 방법론뿐만 敲阀汽俊 汲摹窍妨绰 진입점이 여러 부작용을 한다는 것입니다. 주 () '를 사용하여 프로그램을 운영할 수 있습니다' 진입점이, but 너회가 don& # 39, to 없다. 주 () ',' setup.py '동시에' 대체 진입점이 다른 도구를 사용할 수 있을 것으로 기대하고 있다. 예를 들어, '공정' 구니콘 파일로 실행할 수 있는 앱 () '기능을 정의하고,' 대신 '주 ()'. 마찬가지로 'setup.py', ',' t want it 할 수 있도록 # 39 don& 임포트합니다 구니콘 코드에서 # 39 의 임포트된 it& 동안 아무 일도 할 수 있다 (가져오기의 좉툑 문제 때문에).
고려해야 합니다.
print __name__
위의 출력물에는 '는' main.
if __name__ == "__main__":
print "direct method"
사실, 위의 기술서임을 " 직접판매용 method" 및 유인물, . 예를 들어, 만약 그들이 이 클래스에서 임포트된 다른 수준의 it doesn& # 39, 반면, t, 직접 method" " 인쇄하십시오 임포팅 것 같을 수 있기 때문에, 첫 번째 모델 name" " name 세트 ','.