一部のモジュール内で定義されている関数のデフォルト値をオーバーライドする方法を理解しようとしています。次のコードを検討してください ( program.py
):
# import the default & user defined settings
from default_settings import *
from my_settings import *
# import some functions, which might be dependent on the settings above
from functions import *
# call dummy_function from 'functions' - prints '1'
dummy_function()
# output SOME_DEFAULT - will be '1'
print SOME_DEFAULT
# re-import 'my_settings' - SOME_DEFAULT will now be '2'
from my_settings import *
print SOME_DEFAULT
ここにあるdefault_settings.py
:
DO_DEBUG = False
SOME_DEFAULT = 1
これがmy_settings.py
、私が内部で使用したい人の値ですfunctions.py
:
DO_DEBUG = True
SOME_DEFAULT = 2
これはfunctions.py
、インポートする必要がdefault_settings
ある場所です。そうしないと、NameError が発生します。汎用ライブラリのようにする必要があるmy_settings
ため、ここではインポートしたくありません。functions.py
# if I leave this line out, then I get a
# "NameError: name 'SOME_DEFAULT' is not defined"
from default_settings import *
# I don't want to add "from my_settings import *" here, because 'functions.py'
# is supposed to be a generic library of functions.
# dummy decorator.
def do_profile(cond):
def resdec(f):
if cond:
print "profiling!"
return f
return resdec
# dummy function depending on both 'DO_DEBUG' and 'SOME_DEFAULT'
@do_profile(DO_DEBUG)
def dummy_function(bla=SOME_DEFAULT):
print bla
実行するpython program.py
と、次の出力が得られます。
1
1
2
これは予期されることです。1 つ目1
は からdummy_function
、2 つ目はinside1
のインポートによるもので、は を再インポートした結果です。default_settings
functions
2
my_settings
dummy_function
を使用するだけで必要なデフォルト設定を上書きする方法はありますmy_settings
か? from default_settings import *
の行を省略しようと思ったのですfunctions
が、 になってしまいましNameError
た。からインポートfunctions
し、同時にすべての変数を に渡す方法はありますfunctions
か?