Python 스크립트를 작성하고 이것을 추가하면 이 기사에 감사하게 될 것입니다.

Python을 사용하는 사람들은 종종 스크립트를 작성합니다.작업 효율성을 향상시키거나 특정 요구 사항을 충족시키기 위해 Python 스크립트는 일반적이고 유용한 것입니다.

그러나 최근에 이전에는 눈치 채지 못했던 문제를 발견했습니다. 즉,  if __name__ == "__main__": 이 문장을 스크립트에 추가할지 여부는 실제로 스크립트 사용에 큰 영향을 미치며 여전히 많은 지식이 있습니다.

일반적인 오해

많은 친구들이 스크립트를 작성할 때 더 캐주얼합니다.간단한 스크립트는 기능없이 직접 작성하고 순차적으로 실행합니다. 복잡한 스크립트의 경우 기능이 추가될 수 있습니다. 이러한 작성 방식은 가독성이 떨어지고 사람들은 종종 프로그램 작업의 항목과 순서를 한눈에 찾을 수 없습니다.

Python 커뮤니티에서 더 권장되는 작성 방법은 스크립트를 작성할 때 다음 문을 추가하는 것입니다.

def main():
    # do something
    print("do something.")

if __name__ == "__main__":
    main()

대부분의 사람들이 이것을 볼 때, 문제가 무엇인지, 그것을 추가하는 것이 중요하지 않다고 말할 것입니다!

너무 바빠서 경멸하지 말고 다같이 조심히 분해해봅시다!

용도는 무엇입니까

기능을 구체적으로 설명하기  전에 if __name__ == '__main__' 간단한 예를 통해 직관적으로 느껴보자.

# const.py
 
PI = 3.14
 
def train():
    print("PI:", PI)
 
train()
# area.py
 
from const import PI
 
def calc_round_area(radius):
    return PI * (radius ** 2)
 
def calculate():
    print("round area: ", calc_round_area(2))
 
calculate()

area.py의 실행 결과를 살펴보겠습니다.

PI: 3.14
round area:  12.56

의 PI 변수는 실행시  train() const.py에 있는 함수의 출력도 가져오고, 함수가 아닌 변수만 참조하므로 우리가 보고 싶지 않은 부분입니다.

이 문제에 대한 해결책도 매우 간단합니다. const.py에 문장을 추가하기만 하면 됩니다.

PI = 3.14

def train():
   print("PI:", PI)

if __name__ == "__main__":
   train()

area.py를 다시 실행하면 출력은 다음과 같습니다.

round area:  12.56

이것이 우리가 기대한 것입니다.

프로그램 실행 항목

if __name__=="__main__": 위의 예제에 따르면 그렇지 않은 경우 파일을 area.py로 가져올 때 const.py의 모든 코드가 실행되고 추가 후에는 가져온 코드 부분만 실행됨을 알 수 있습니다  .

이것은  if __name__=="__main__": 명백한 기능이며  if __name__=="__main__": 실제로 Python 시뮬레이션의 프로그램 항목과 동일합니다. 모듈은 서로를 참조하기 때문에 서로 다른 모듈이 그러한 정의를 가질 수 있지만 하나의 진입 프로그램만 있을 수 있으며 선택할 진입 프로그램은 의 값에 따라 다릅니다  __name__ .

또 다른 작은 프로그램을 살펴보겠습니다.

# test.py

print("look here")
print(__name__)
 
if __name__ == '__main__':
    print("I'm test.py")

프로그램을 실행한 결과는 다음과 같습니다.

look here
__main__
I'm test.py

__name__ 이때 변수 의 값이 임을  알 수 있으므로  __main__"I'm test.py"를 출력합니다. 다른 파일을 실행하고 실행 중인 파일을 통해 이 파일을 호출하면 프로그램 항목이 잘못되어 명령문이 인쇄되지 않고 명령문이 실행되지 않습니다.

코드 사양

파이썬 프로그램과 동등한 입력 기능 으로  if __name__=="__main__": 프로그램의 논리가 시작되는 위치를 명확하게 알 수 있습니다.물론 프로그램 시작 논리를 여기에 의식적으로 넣어야 합니다. 실제로 이것은 PyCharm에서도 권장합니다.

C, Java, Golang 및 C++와 같은 많은 우수한 프로그래밍 언어에 기본 항목 기능이 있는 이유는 무엇입니까? 중요한 이유 중 하나는 프로그램 항목이 통일되어 읽기 쉽기 때문이라고 생각합니다.

다중 프로세스 시나리오에서 큰 효과

병렬 컴퓨팅을 위해 여러 프로세스를 사용하는 경우 다음과 같은 코드를 작성하십시오.

import multiprocessing as mp

def useful_function(x):
    return x * x

print("processing in parallel")
with mp.Pool() as p:
    results = p.map(useful_function, [1, 2, 3, 4])
    print(results)

이 코드를 실행하면 콘솔은 항상 다음을 인쇄합니다.

processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel
processing in parallel

그리고 프로그램은 RuntimeError를 계속 보고합니다.

추가하면  if __name__=="__main__": 프로그램이 예상대로 작동합니다.

import multiprocessing as mp

def useful_function(x):
    return x * x

if __name__ == '__main__':
    print("processing in parallel")
    with mp.Pool() as p:
        results = p.map(useful_function, [1, 2, 3, 4])
        print(results)

Python의 다중 프로그램은 여러 Python 인터프리터를 시작하는 것입니다.각 Python 인터프리터는 스크립트를 가져오고 하위 프로세스에 대한 전역 변수 및 함수의 복사본을 복사합니다.있는 경우 그 뒤에 있는 코드는 가져오기를 사용하지 않습니다  if __name__=="__main__":. 반복적으로 실행됩니다. 그렇지 않으면 여러 프로세스를 생성하기 위한 코드를 가져와서 실행하므로 무한 재귀적으로 자식 프로세스를 생성합니다.

요약하다

if __name__=="__main__": 필수는 아니지만 스크립트를 작성할 때 이 사양을 따르는 것이 좋습니다.이 사양은 Python 커뮤니티의 규칙이며 Zen of Python에 해당합니다.

Supongo que te gusta

Origin blog.csdn.net/veratata/article/details/128629362
Recomendado
Clasificación