반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 컴퓨터과학
- Yes
- 컴퓨터비전
- 머신러닝
- 데이터베이스
- 소프트웨어
- 데이터구조
- 프로그래밍
- 빅데이터
- 네트워크보안
- 자료구조
- 인공지능
- 사이버보안
- 클라우드컴퓨팅
- 2
- 파이썬
- 보안
- 프로그래밍언어
- 소프트웨어공학
- 데이터과학
- 코딩
- 버전관리
- 딥러닝
- 데이터분석
- 자바스크립트
- 컴퓨터공학
- 웹개발
- 네트워크
- I'm Sorry
- 알고리즘
Archives
- Today
- Total
스택큐힙리스트
Python을 가져올 때 왜 내 모듈이 실행되고 어떻게 멈출 수 있을까요? 본문
반응형
나는 파이썬 프로그램을 만들고 있는데, 두 가지 방법으로 실행할 수 있습니다.
첫 번째 방법은 python main.py
를 호출하여 사용자에게 친절한 방식으로 입력을 받은 다음, 사용자 입력을 프로그램을 통해 실행하는 것입니다. 두 번째 방법은 python batch.py -파일-
을 호출하여 친절한 입력 수집 과정을 거치지 않고 한 번에 전체 파일의 입력을 프로그램에 전달하는 것입니다.
문제는 batch.py
를 실행할 때, main.py
에서 몇 가지 변수/메서드 등을 가져 오는데, 프로그램의 첫 줄에 위치한 다음 코드를 실행할 때 바로 오류가 발생한다는 점입니다:
import main
나는 가져온 main
모듈에 포함된 코드를 실행하지 않도록 어떻게 할 수 있을까요?
답변 1
이것은 파이썬 동작 방식에 따른 것입니다. 예약어인 class
와 def
는 선언이 아니라 실행되는 실제 명령문입니다. 이러한 명령문이 실행되지 않으면 모듈은 비어있게 됩니다.
이를 구현하는 관용적인 방법은 다음과 같습니다:
# class/def 등 항상 실행되어야 할 부분
def main():
pass
if __name__ == __main__:
# 'import'를 통해 호출되지 않을 때만 실행되어야 할 부분
main()
그러나 모듈이 가져온 소스에 대한 소스 제어가 필요합니다.
답변 2
파이썬은 모듈을 임포트할 때 그 모듈을 실행하는 것이 기본 동작입니다. 이 동작은 파이썬의 장점 중 하나로, 모듈이 임포트될 때 해당 모듈에서 정의된 코드의 일부 또는 전체를 실행하여 모듈이 기대한대로 작동하는지 확인합니다. 하지만 때로는 모듈이 실행될 필요 없이 단순히 사용하고 싶을 때도 있습니다.파이썬은 __name__이라는 특별한 변수를 제공하는데, 이 변수는 모듈이 직접 실행될 때 __main__으로 설정되며, 다른 모듈에 임포트될 때는 모듈의 이름이 할당됩니다. 따라서 이 변수를 사용하여 모듈이 실행되는지 아니면 임포트되는지를 확인할 수 있습니다.
모듈이 임포트될 때 실행되는 동작을 원하지 않는다면, 모듈의 코드를 다음과 같이 수정하십시오:
```python
def main():
# 모듈 실행 코드
if __name__ == __main__:
main()
```
위와 같이 모듈의 실행 코드를 main() 함수 내에 넣고, __name__ 변수가 __main__인지 확인하여 main() 함수를 호출하는지 확인합니다. 이렇게 하면 모듈이 다른 모듈에서 임포트될 때는 main() 함수가 실행되지 않습니다. 대신, 모듈을 직접 실행할 때만 main() 함수가 실행됩니다.
따라서, 파이썬에서 모듈이 임포트될 때 실행되는 동작을 제어하기 위해 위와 같은 방법을 사용할 수 있습니다. 이러한 기능을 활용하면 모듈을 더욱 유연하게 임포트하여 사용할 수 있습니다.
반응형
Comments