Python 是否可以在函数中定义一个默认变量,然后再定义它';什么是定义?

Python 是否可以在函数中定义一个默认变量,然后再定义它';什么是定义?,python,function,variables,default,Python,Function,Variables,Default,我的代码顶部有这样的内容: def fun_func(x=something): print(x+x) 我得到了这个: name错误:未定义名称“某物” 声明默认变量后,是否必须定义函数?这只发生在代码的底部,所以我认为它看起来有点不美观。有办法解决这个问题吗?没有(至少不需要过于“聪明”);问题是带有“x=something”的行,在到达函数声明时(换句话说,在“编译时”)对其进行计算。只要在调用fun_func()之前定义“something”,那么“something+some

我的代码顶部有这样的内容:

def fun_func(x=something):
    print(x+x)
我得到了这个:

name错误:未定义名称“某物”

声明默认变量后,是否必须定义函数?这只发生在代码的底部,所以我认为它看起来有点不美观。有办法解决这个问题吗?

没有(至少不需要过于“聪明”);问题是带有“x=something”的行,在到达函数声明时(换句话说,在“编译时”)对其进行计算。只要在调用fun_func()之前定义“something”,那么“something+something”这一行就不是问题。

你不能按自己的要求去做,但你可以做类似的事情。将默认值设置为其他sentinel值,然后在函数中添加检查<代码>无通常是一个不错的选择

def fun_func(x=None):
    if x is None:
        x = something
    print(x+x)

# lots of lines of code ...

something = 21
fun_func()
这样,
something
的计算将推迟到实际调用
fun\u func()
时进行

如果
None
实际上是
x
的合法值,那么您可能更喜欢这种稍微复杂一些的方法:

_sentinel = object()
def fun_func(x=_sentinel):
    if x is _sentinel:
        x = something
    print(x+x)

不,但是你可以在文件的末尾修补你的函数。我想这也行,但这是一个好的做法吗?你别无选择。一种解决方法是将默认参数设置为可变容器,如
列表
,并在调用函数之前更改列表的内容。可变默认参数通常不被认为是一种好的做法,但在这些情况下也可以。函数从不使用
x
,这有什么意义?你的意思是写
打印(x+x)
?哦,是的。你是对的。我要编辑它。一些库为它们的默认sentinel编写了一个自定义类型,带有一个自定义的
\uu repr\uu
,所以看起来像
f(x=)
而不是
f(x=)