왜 def main ()을 사용합니까? [복제]
가능한 중복 :
무엇을if __name__== "__main__"
합니까?
사용하는 일부 코드 샘플 및 자습서를 보았습니다.
def main():
# my code here
if __name__ == "__main__":
main()
그런데 왜? 파일 상단에 함수를 정의하지 않은 이유가 있습니까? 그런 다음 코드를 작성하십시오. 즉
def my_function()
# my code here
def my_function_two()
# my code here
# some code
# call function
# print(something)
메인에 운이 있는지 궁금합니다.
메인 센티넬이 없으면 스크립트를 모듈로 가져온 경우에도 코드가 실행됩니다.
다른 사람들은 이미 대답했지만 아직 추가 할 것이 있다고 생각합니다.
그 if
진술을 main()
(특별한 순서로) 요구 하지 않는 이유 :
C 및 Java와 같은 다른 언어
main()
에는 프로그램이 실행될 때 호출 되는 함수가 있습니다. 이것을 사용하여if
파이썬을 그들처럼 행동하게 만들 수 있습니다. 많은 사람들에게 더 친숙하게 느껴집니다.코드는 더 깨끗 하고 읽기 쉽고 체계적으로 구성됩니다. (예, 이것이 주관적이라는 것을 알고 있습니다)
import
파이썬 코드는 부작용없이 모듈로 가능합니다 .이는 해당 코드에 대해 테스트를 실행할 수 있음을 의미합니다.
즉, 해당 코드를 대화 형 파이썬 셸로 가져 와서 테스트 / 디버그 / 실행할 수 있습니다.
내부 변수
def main
는 로컬 이고 외부 변수 는 전역 입니다. 이로 인해 몇 가지 버그와 예기치 않은 동작이 발생할 수 있습니다.
그러나 함수 를 작성 하고 명령문 내에서 호출 할 필요 는 없습니다 .main()
if
나는 보통 어떤 종류의 기능도없이 작은 스크립트를 작성하기 시작한다. 스크립트가 충분히 커지거나 함수에 모든 코드를 넣는 것이 나에게 도움이된다고 생각되면 코드를 리팩터링하여 수행하십시오. 이것은 bash
스크립트를 작성할 때도 발생합니다 .
메인 함수 안에 코드를 넣더라도 정확히 그 코드를 작성할 필요는 없습니다. 깔끔한 변형은 다음과 같습니다.
import sys
def main(argv):
# My code here
pass
if __name__ == "__main__":
main(sys.argv)
이는 main()
사용자 정의 매개 변수를 전달하는 다른 스크립트 (또는 대화식 쉘)에서 호출 할 수 있음을 의미합니다 . 이는 단위 테스트 또는 배치 처리에 유용 할 수 있습니다. 그러나 위의 코드는 argv를 파싱해야하므로 이미 파싱 된 매개 변수를 전달하는 다른 호출을 사용하는 것이 좋습니다.
내가 작성한 객체 지향 응용 프로그램에서 코드는 다음과 같습니다.
class MyApplication(something):
# My code here
if __name__ == "__main__":
app = MyApplication()
app.run()
따라서 자신에게 더 적합한 코드를 자유롭게 작성하십시오. :)
foo.py의 내용이
print __name__
if __name__ == '__main__':
print 'XXXX'
foo.py 파일은 두 가지 방법으로 사용될 수 있습니다.
- 다른 파일로 가져 오기 :
import foo
이 사건에서 __name__
이다 foo
, 코드 섹션은 실행되지 않고 인쇄되지 않습니다 XXXX
.
- 직접 실행 :
python foo.py
직접 실행될 때 __name__
와 동일하며 __main__
해당 섹션의 코드가 실행되고 인쇄됩니다.XXXX
이 기능을 사용하여 동일한 모듈 내에서 다양한 종류의 단위 테스트를 작성합니다.
" 무엇을 if __name__==“__main__”:
합니까? "는 이미 답변되었습니다.
갖는 main()
기능은 당신이 경우 그 기능 호출 할 수 있습니다 import
모듈. 이 (IMHO)의 주요 장점은 사용자가 단위 테스트를 할 수 있다는 것입니다.
두 번째 스크립트를 고려하십시오. 다른 것으로 가져 오면 "글로벌 레벨"과 같은 명령이 실행됩니다.
참고 URL : https://stackoverflow.com/questions/4041238/why-use-def-main
'Programing' 카테고리의 다른 글
“while (! feof (file))”이 왜 항상 잘못입니까? (0) | 2020.02.10 |
---|---|
힘내에서 "원산지"는 무엇입니까? (0) | 2020.02.10 |
jQuery를 사용하여 입력에 초점이 있는지 테스트 (0) | 2020.02.10 |
비어 있지 않은 디렉토리로 어떻게 복제합니까? (0) | 2020.02.10 |
jQuery를 사용하여 이스케이프 키의 키 코드 (0) | 2020.02.10 |