0

모듈로 실행하거나 실행할 필요가없는 독립적 인 파일로 실행할 수있는 프로그램이 있습니다.인터프리터가 함수의 기본 인수를 확인하는 것을 피하려면 어떻게해야합니까?

가져 오기 할 때 import_location = /Users/Documents/etc과 같은 폴더에있는 줄을 포함하는 'globalSettings.py'파일을 가져와야합니다. __main__으로 실행하면 필요하지 않습니다. 괜찮

try: 
    import globalSettings 
except ImportError: 
    print("Being run as independent program") 

:

그래서, 내 코드의 시작 부분에, 나는 다음 있습니다.

main 함수를 호출하면 독립적으로 실행되는 경우 관련 설정을 직접 전달하고 외부 모듈로 실행되는 경우 사용되는 기본값을 사용합니다.

def test_func(foo, bar=globalSettings.import_location): 
    do stuff 

나는 다음과 같이 호출 :

은 MCVE입니다

if __name__ == "__main__": 
    test_func(20, "Users/myname/testfolder/etc") 

을 내가 test_func(30)처럼, 다른 곳에서 가져올 때, 그리고 그것은 globalSettings에서 bar을 찾을 수 있습니다.

난 항상 통과 나는 독립적 인 프로그램으로 호출 인수로 바 있기 때문에 그것은, globalSettings을 필요로하지 않습니다
Traceback (most recent call last): 

File "/Users/tomburrows/Dropbox/Python Programming/import_test.py", line 1, in <module> 
    def test_func(foo, bar=globalSettings.import_location): 
NameError: name 'globalSettings' is not defined 

, 그것은 단지 그것을 필요로 할 것이다 : 그러나, 독립적으로 실행하면 오류가 발생합니다 가져 오기로 실행할 때, 내가 그곳에 globalSettings 파일이 있는지 확인합니다.

어쨌든 내가 겪고있는 오류를 무시할 수 있습니까?

+0

프로그램에서 둘 이상의'if __name__ == "__main __":'을 가질 수 있습니다. 그래서이 함수를 사용하여 두 가지 다른 방식으로 함수를 정의 할 수 있습니다. 즉,'test_func()'의 두 정의 중 하나를 추가하여 적절한 경우 기본값을 다른 것으로 만든다. – martineau

답변

1

스크립트 (특히 함수 정의)에서 무조건 사용되는 이름 (globalSettings)을 조건부로 정의하면 오류가 발생합니다.

try: 
    import globalSettings 
    import_location = globalSettings.import_location 
except ImportError: 
    print("Being run as independent program") 
    import_location = '' # or whatever else 

을 다음 bar에 대한 기본 값으로 import_location을 가지고 함수를 정의 : 당신이 무엇을 할 수 있는지

는 예외가 발생하더라도, 반드시 기본 인수는 항상 존재하게됩니다.

+0

고맙지 만,'globalSettings'에서 많은 것을 가져오고 있다면, 그것을 할 수있는 더 빠른 방법이 있습니까? – tburrows13

+0

나는 당신이 더 빨리 의미하는 바를 확신하지 못합니다. 'globalSettings'의 값을 다양한 함수의 많은 인자에 대한 기본값으로 사용하고 있습니까? –

+0

나는'globalSettings'의 각 변수에 대해 내 코드에 2 줄을 추가해야한다는 것을 의미했는데 이것은 큰 문제는 아니지만 더 짧은 방법이 있는지 궁금합니다. 하나의 함수에있는 변수 만 기본값으로 사용하고 있습니다. – tburrows13