>백엔드 개발 >파이썬 튜토리얼 >Python 스크립트를 작성할 때 이것을 꼭 추가하세요!

Python 스크립트를 작성할 때 이것을 꼭 추가하세요!

PHPz
PHPz앞으로
2023-04-14 19:40:011396검색

Python을 사용하는 사람들은 작업 효율성을 높이기 위해서든 특정 요구 사항을 충족하기 위해서든 일부 스크립트를 작성하는 경우가 많습니다. Python 스크립트는 일반적이고 유용한 것입니다.

그런데 최근에 이전에는 전혀 눈치채지 못했던 문제를 발견했는데, if __name__ == "__main__":
이 문장은 실제로 스크립트 사용에 큰 영향을 미치며, 그 외에도 많은 것들이 있습니다. 그 안에는 훌륭한 지식이 있습니다.

일반적인 오해

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

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

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 변수가 실행되면 const.py의 train()
함수의 인쇄도 가져오지만 우리는 단지 변수이고 참조 함수가 아니기 때문에 이는 우리가 보고 싶지 않은 것입니다.

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

PI = 3.14

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

if __name__ == "__main__":
 train()

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

round area:12.56

이것은 우리가 예상한 결과입니다. .

entrance를 실행하는 프로그램

위의 예에서 if __name__=="__main__":이 없으면 파일을area.py로 가져올 때 const.py
의 모든 코드가 실행되는 것을 알 수 있습니다. 추가한 후에는 가져온 코드 부분만 실행하세요.

이것은 if __name__=="__main__":의 명백한 효과입니다. 실제로 if __name__=="__main__":은
Python 시뮬레이션의 프로그램 항목과 동일합니다. 모듈은 서로를 참조하므로 서로 다른 모듈이 이러한 정의를 가질 수 있지만 선택되는 입력 프로그램은 __name__의 값에 따라 하나만 있을 수 있습니다.

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

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

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

look here
__main__
I'm test.py

이때 변수 __name__의 값이 __main__인 것을 알 수 있으므로 "나는
test입니다." .py"가 인쇄됩니다. 다른 파일을 실행하고 실행 중인 파일을 통해 이 파일을 호출하면 프로그램 항목이 잘못되어 해당 명령문이 실행되지 않으므로 해당 명령문이 인쇄되지 않습니다.

코드 사양

if __name__=="__main__": Python과 동일
프로그램에는 입력 기능도 있습니다. 프로그램의 논리가 시작되는 위치를 명확하게 알 수 있습니다. 프로그램의 논리는 모두 여기에 배치됩니다. 실제로 이는 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 인터프리터는 스크립트를 가져오고 전역 복사본을 복사합니다.
__name__=="__main__":이 있는 경우 그 뒤에 있는 코드는 가져오지 않으며 반복적으로 실행되지 않습니다. 그렇지 않으면 여러 프로세스를 생성하는 코드가
import 및 실행되어 무한 재귀적으로 자식 프로세스가 생성됩니다

Summary

if __name__=="__main__": 필수는 아니지만 강구하는 것이 좋습니다. 스크립트를 작성할 때 이 사양을 따르세요.

위 내용은 Python 스크립트를 작성할 때 이것을 꼭 추가하세요!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제