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