【问题标题】:Delay default arguments being read until function is called延迟读取默认参数,直到调用函数
【发布时间】:2019-09-28 12:42:25
【问题描述】:

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

在一个文件中包含一个函数。在另一个变量中,以及那些函数的应用(所以总共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

如果有人能指出我正确的方向或告诉我我在做什么是不可能的,那将非常感激。

【问题讨论】:

  • 如果你能用真实的代码来解释这一点,人们可能会更容易提供好的解决方案。

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


【解决方案1】:

使用None:

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

a = 5

function(4)

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

【讨论】:

    猜你喜欢
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多