Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:是否可以从全局名称空间将参数默认为变量?_Python - Fatal编程技术网

Python:是否可以从全局名称空间将参数默认为变量?

Python:是否可以从全局名称空间将参数默认为变量?,python,Python,我想知道我是否可以得到以下行为: a=5 def func(arg2=a): bah blah 因此,当我可以在没有参数的情况下运行函数func,那么将采用a,除非我输入了其他内容。可以。脚本运行时,def func(arg2=a):行将精确计算一次,以创建函数对象。默认值将绑定到a当时引用的对象。这意味着如果以后在脚本中更改a,函数的默认参数将不会更改。这也是您不想用作默认参数的原因 如果要使用全局a的动态值,则需要在函数本身的运行时对其进行求值。一种惯用的方法是 def func

我想知道我是否可以得到以下行为:

a=5

def func(arg2=a):
    bah blah

因此,当我可以在没有参数的情况下运行函数
func
,那么将采用
a
,除非我输入了其他内容。

可以。脚本运行时,
def func(arg2=a):
行将精确计算一次,以创建函数对象。默认值将绑定到
a
当时引用的对象。这意味着如果以后在脚本中更改
a
,函数的默认参数将不会更改。这也是您不想用作默认参数的原因

如果要使用全局
a
的动态值,则需要在函数本身的运行时对其进行求值。一种惯用的方法是

def func(arg2=None):
    if arg2 is None:
        arg2 = a
    blah blah blah

None
只是用于指示“无输入”的常用值。您可以根据需要使用任何实际的sentinel值。

而不是您可能想要的方式<代码>a在函数创建时进行评估(至
5
)。不考虑
a
以后的更改。您只能将例如
None
设置为默认值,在函数开头对其进行测试,然后将其设置为
a
的值。是否要调用命名空间?还是定义名称空间?别忘了选择答案。这正是我想要的。ThanksThis使用来自定义的名称空间的值,而不是调用名称空间的值。在有限的范围内使用调用方的值是可能的,但通常是个坏主意。@AlexDeft。你应该在你的标题中说明你想要定义名称空间。事实上,从定义函数的同一脚本调用函数与此无关。我展示的示例中的
a
将位于函数的模块中,而不是您必须从中调用它的模块。@user2357112supportsMonica。抢手货我在代码中回答了这个问题,而不是在标题中。要求OP立即澄清。调用名称空间确实会使事情变得复杂。@MadPhysician我明白如果我们有多个名称空间,事情会变得复杂。我会在简单的场景中这样做,只有当我有足够的时间去偷懒并且不去争论的时候。