Programing

왜 def main ()을 사용합니까?

lottogame 2020. 2. 10. 22:00
반응형

왜 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



반응형