파이썬에서 __name__=='__main__'인지 이해하기
게시 됨: 2022-08-12이 가이드에서는 파이썬에서 if __name__ == '__main__' 의 기능과 중요성을 이해할 것입니다.
다른 모듈이 있는 Python 코드베이스를 훑어본 적이 있습니까?
그렇다면 아마도 하나 이상의 모듈에서 if __name__ == '__main__' 조건부로 표시되었을 것입니다. 앞으로 몇 분 동안 위의 조건문이 무엇을 의미하는지 설명하고 도움이 될 수 있는 예를 살펴보겠습니다.
의 시작하자!
Python에서 __name__의 중요성은 무엇입니까?

Python에서 모듈은 함수 정의, 평가할 표현식 세트 등을 포함하는 .py 파일입니다. 예를 들어 hello_world.py라는 파일이 있는 경우 이를 hello_world.py 파일 또는 hello_world 모듈이라고 합니다.
Python 모듈을 실행할 때 Python 인터프리터는 실행 전에 몇 가지 특수 변수에 대한 값을 설정합니다. __name__ 은 그 중 하나입니다. __name__ 의 중요성을 이해하는 열쇠는 파이썬에서 가져오기가 어떻게 작동하는지 이해하는 것입니다.
여기에서 이 섹션의 코드를 다운로드하세요.
example-1 폴더로 이동합니다. module1.py 파일이 있습니다. __name__ 변수는 현재 모듈의 네임스페이스에 있습니다.
이 모듈은 __name__ 변수의 값이 뒤따르는 라인을 출력합니다.
# example-1/module1.py print("This is module1.") print(f"The __name__ variable of module 1 is: {__name__}.") 이제 명령줄에서 module1 을 실행해 보겠습니다.
$ python module1.py 출력에서 __name__ 변수가 __main__ 으로 설정되었음을 알 수 있습니다.
This is module1. The __name__ variable of module 1 is: __main__.Python에서 모듈 가져오기
Python 모듈을 실행하는 것 외에도 현재 모듈 내에서 다른 Python 모듈의 기능을 사용하려는 경우가 있습니다. 파이썬은 import 를 통해 이것을 용이하게 합니다.
가져오기를 사용하면 코드를 다시 작성할 필요 없이 현재 모듈의 범위로 가져와서 다른 모듈의 기능을 재사용할 수 있습니다.

module2.py 파일에는 다음이 포함됩니다. 내부에 module1 을 가져왔습니다. module2 .
# example-1/module2.py import module1 # module1 is imported print(f"This is module2") print(f"The __name__ variable of module2 is: {__name__}.") module2.py 를 실행하고 출력을 관찰합니다.
$ python module2.py아래 출력에서:
-
module1을module2내부로 가져올 때 내부에서 실행되고 해당 출력이 출력되는 것을 볼 수 있습니다. - 하지만 이번에는 __name__ 변수가 __main__이 아니라
module1입니다. -
module2를 직접 실행했기 때문에 모듈에 해당하는 __name__ 변수는 이제 __main__입니다.
Output This is module1. The __name__ variable of module 1 is: module1. This is module2 The __name__ variable of module2 is: __main__.핵심 아이디어 :
– 모듈이 직접 실행되는 경우 해당 __name__ 변수가 __main__ 으로 설정됩니다.
– 모듈을 다른 모듈 내부로 가져오면 해당 __name__이 모듈 이름으로 설정됩니다.
파이썬에서 if __name__=='__main__'의 예

이 섹션에서는 if __name__ == '__main__' 조건의 실제 사용 사례를 볼 수 있습니다. 간단한 함수를 정의한 다음 단위 테스트를 작성하여 함수가 예상대로 작동하는지 확인합니다.
코드를 다운로드하고 따라해보세요.
이 섹션의 코드는 example-2 폴더에서 찾을 수 있습니다.
여기에서 add.py 는 add_ab() 함수의 정의를 포함하는 Python 파일입니다. add_ab() () 함수는 두 숫자를 가져와서 합을 반환합니다.
# example-2/add.py def add_ab(a,b): return a + b 
우리는 파이썬의 unittest 모듈을 사용하여 add_ab() 함수를 테스트할 것입니다.
Python 함수에 대한 테스트 케이스 작성
test_add 모듈의 내용이 포함된 아래 코드 스니펫을 보십시오.
# example-2/test_add.py import unittest from add import add_ab class TestAdd(unittest.TestCase): def test_add_23(self): self.assertEqual(add_ab(2,3), 5) def test_add_19(self): self.assertEqual(add_ab(1,9), 10) def test_add_1_minus7(self): self.assertEqual(add_ab(1,-7), -6)위의 코드는 다음을 수행합니다.

- Python의 내장 unittest 모듈을 가져옵니다.
-
add모듈에서add_ab()함수를 가져옵니다. - 테스트 클래스
TestAdd및 테스트 케이스 세트를 테스트 클래스 내의 메소드로 정의합니다.
코드에 대한 단위 테스트를 설정하려면 먼저 unittest.TestCase 에서 상속되는 테스트 클래스를 정의해야 합니다. 모든 테스트 케이스는 클래스 내부의 메소드로 지정되어야 하며 test_ 로 시작해야 합니다.
참고 : 메서드 이름을
test_<some-descriptive-name>하지 않으면 해당 테스트가 감지되지 않으므로 실행되지 않습니다.
이제 터미널에서 test_add 모듈을 실행해 보겠습니다.
$ python test_add.py출력이 없고 테스트가 실행되지 않았음을 알 수 있습니다.
왜 이런 일이 발생합니까?
단위 테스트를 실행하기 test_add.py 를 실행하면서 아래 명령어를 사용하여 unittest 를 메인 모듈로 실행해야 하기 때문이다.
$ python -m unittest test_add.py위의 verbose 명령을 실행하면 세 가지 테스트가 모두 성공적으로 실행되었음을 알 수 있습니다.
Output ... ---------------------------------------------------------------------- Ran 3 tests in 0.000s OK 그러나 이 모듈 test_add 가 실행될 때 테스트를 실행하는 것이 편리할 것입니다. 다음 섹션에서 수행하는 방법을 알아보겠습니다.
if __name__ == '__main__'을 사용하여 unittest를 메인 모듈로 실행하기

모듈이 직접 실행될 때 모든 단위 테스트를 실행하려면 조건을 추가할 수 있습니다.
# example-2/test_add.py import unittest from add import add_ab class TestAdd(unittest.TestCase): def test_add_23(self): self.assertEqual(add_ab(2,3), 5) def test_add_19(self): self.assertEqual(add_ab(1,9), 10) def test_add_1_minus7(self): self.assertEqual(add_ab(1,-7), -6) # Run unittest as the main module if __name__ == '__main__': unittest.main() 위 코드 스니펫의 조건부는 Python 인터프리터에게 다음과 같이 알려줍니다. 이 모듈이 직접 실행되면 내부에서 코드를 실행하십시오. unittest.main() .
위의 두 줄의 코드를 추가한 후 test_add 모듈을 실행할 수 있습니다.
$ python test_add.py️ 이제 테스트 추가 모듈을 직접 실행하면 우리가 정의한 세 가지 테스트가 모두 실행됩니다.
Output ... ---------------------------------------------------------------------- Ran 3 tests in 0.000s OK위의 출력 OK는 모든 테스트가 성공적으로 실행되었음을 나타냅니다. 세 개의 점 ...은 세 가지 테스트가 실행되었고 모두 통과했음을 나타냅니다.
이제 예상 반환 값 test_add_1_minus7 을 8로 변경해 보겠습니다. 이 경우 함수는 -6을 반환하므로 테스트에 실패한 것이 하나 있어야 합니다.
def test_add_1_minus7(self): self.assertEqual(add_ab(1,-7), 8) 아래 출력에서 볼 수 있듯이 .F. , 세 가지 테스트 중 패턴 1이 실패하고(두 번째 테스트), 역추적에서 – 6 != 8을 나타내는 AssertionError 를 얻습니다.
Output .F. ====================================================================== FAIL: test_add_1_minus7 (__main__.TestAdd) ---------------------------------------------------------------------- Traceback (most recent call last): File "test_add.py", line 12, in test_add_1_minus7 self.assertEqual(add_ab(1,-7), 8) AssertionError: -6 != 8 ---------------------------------------------------------------------- Ran 3 tests in 0.021s FAILED (failures=1) 주목해야 할 한 가지 중요한 점은 테스트 가 반드시 테스트 클래스에 지정된 것과 같은 순서로 실행되는 것은 아니라는 것입니다. 위의 예에서 test_add_1_minus7 은 테스트 클래스의 세 번째 메서드로 정의되어 있지만 해당 테스트는 두 번째로 실행되었습니다.
합산
이 튜토리얼이 파이썬에서 if __name__ == '__main__' 조건문이 어떻게 작동하는지 이해하는 데 도움이 되었기를 바랍니다.
다음은 주요 내용을 간략하게 요약한 것입니다.
- Python 인터프리터는 Python 스크립트를 실행하기 전에 __name__ 변수를 설정합니다.
- 모듈을 직접 실행할 때 __name__ 의 값은 __main__ 입니다.
- 다른 Python 스크립트 내에서 모듈을 가져올 때 __name__ 의 값은 모듈 이름입니다.
- if __name__ == '__main__' 을 사용하여 실행을 제어하고 직접 실행과 가져온 실행 중에 각각 실행되는 모듈 부분을 제어할 수 있습니다.
다음으로 Python 세트에 대한 이 심층 가이드를 확인하세요. 즐거운 배움!
