延迟读取默认参数,直到调用函数

时间:2019-05-10 15:13:40

标签: python python-3.x function python-decorators

我具有分布在多个文件中的函数和变量,并且试图不创建导入网络。

在一个文件中包含一个功能。在另一个变量中,以及那些函数的应用(总共2个文件)。

功能的应用(显然)需要功能,但功能需要变量。

我希望能够执行以下操作。

[编辑:我想在定义函数后定义变量]

def function(arg1, arg2 = a):
    return arg1 + arg2

a = 5

function(4)

我希望输出的是9。 但是,它却产生一个错误,抱怨没有定义a(它没有超出函数的范围,因此无法读取变量)。

我希望函数仅在函数实际运行后才尝试查找变量。我对装饰器知之甚少,但我认为这可能是实现此目的的一种方法。

如果我做类似

def function_1(a):
    def function_2(arg1, arg2 = a):
        return arg1 + arg2

a = 5

然后它没有抱怨,但是我现在需要调用function_1来运行function_2

如果不可能将我指向正确的方向或告诉我我在做什么,那将不胜感激。

1 个答案:

答案 0 :(得分:2)

使用None

def function(arg1, arg2=None):
    if arg2 is None:
        arg2 = a
    return arg1 + arg2

a = 5

function(4)

也就是说,使用a之类的全局变量来影响函数结果可能不是最佳方法。全局变量使代码难以推理,也难以测试。