Python函数在预先声明的值之上断言值



我有一个函数(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'并使用database='MARS',而第二个函数调用第三个函数。有办法做到这一点吗?

只需提供数据库名称作为参数

first_function("MARS")
second_function("MARS")

如果我理解正确的话,这里的问题是func.third_function的默认参数是在导入时定义的。以后是否修改func.database变量并不重要,因为更改不会反映在func.third_function的默认参数上。

一个(公认的棘手(解决方案是在导入的函数上使用闭包注入变量。示例:

file.py

x = 1
def print_x(xvalue = x)
print(xvalue)

Python控制台:

>>> 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

因此,使用如上所述的inject_var,您可能会执行以下操作:

func.third_function = inject_var(func.third_function, "MARS")

最新更新