我试图弄清楚如何覆盖在某些模块中定义的函数的默认值。考虑这段代码(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来自dummy_function,第二个1来自default_settingsinside的导入functions,2是我重新导入的结果my_settings。
dummy_function有没有一种方法可以通过简单地使用来覆盖所需的默认设置my_settings?我想把from default_settings import *线路省掉functions,但后来我遇到了NameError。有没有办法导入functions并同时将所有变量传递到functions?