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

在预先声明的值上断言值的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") 我需要导入此函

我有一个函数(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_函数(“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")