在预先声明的值上断言值的Python函数
我有一个函数(func.py)。其结构如下所示:在预先声明的值上断言值的Python函数,python,python-3.x,Python,Python 3.x,我有一个函数(func.py)。其结构如下所示: database = 'VENUS' def first_function(): print("do some thing") def second_function(): print("call third function) third_function() def third_function(db = database): print("do some other thing") 我需要导入此函
database = 'VENUS'
def first_function():
print("do some thing")
def second_function():
print("call third function)
third_function()
def third_function(db = database):
print("do some other thing")
我需要导入此函数并使用内部定义的函数。但是,我想为数据库使用不同的键。基本上,我想覆盖database='VENUS'并使用database='MARS',而第二个函数调用第三个函数。有什么方法可以做到这一点吗?只需提供数据库名称作为参数
first_函数(“MARS”)
第二个_函数(“MARS”)
因此,如果我理解正确,这里的问题是,func.third_function
的默认参数是在导入时定义的。以后是否修改func.database
变量无关紧要,因为更改不会反映在func.third\u函数的默认参数上
一种(无可否认的)解决方案是在导入的函数上使用闭包注入变量。例如:
file.py
:
Python控制台:
因此,使用上文所述的inject\u var
,您可能可以:
func.third_function = inject_var(func.third_function, "MARS")
这回答了你的问题吗。
>>> import file
>>> file.print_x()
1
>>> file.x = 10
>>> file.print_x() # does not work (as you're probably aware)
1
>>> def inject_var(func_to_inject, var):
def f(*args, **kwargs):
return func_to_inject(var, *args, **kwargs)
return f
>>> file.print_x = inject_var(file.print_x, 10)
>>> file.print_x() # works
10
func.third_function = inject_var(func.third_function, "MARS")