首页 > 解决方案 > Python:是否可以将参数默认为全局名称空间中的变量?

问题描述

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

a=5

def func(arg2=a):
    bah blah

因此,当我可以func不带参数的函数时a,除非我喂别的东西,否则它将被采用。

标签: python

解决方案


是的你可以。当您的脚本运行时,该行将def func(arg2=a):被评估一次,以创建一个函数对象。默认值将绑定到当时a引用的对象。这意味着如果您a稍后在脚本中进行更改,函数的默认参数将不会更改。这也是您不想使用可变容器作为默认参数的原因。

如果要使用 global 的动态值,则a需要在运行时在函数本身内对其进行评估。一种惯用的做法是

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

None只是用于表示“无输入”的常用值。您可以使用任何适合您需要的实际哨兵值。


推荐阅读