【发布时间】:2022-11-16 02:55:53
【问题描述】:
我知道将可变对象分配为函数的默认值是不好的做法。
就像是:
def foo(a = []):
pass
我的问题是分配 Enum 成员也是一种不好的做法吗?
就像是:
Class SomeEnum(Enum)
ENUM_KEY = SomeClass()
def foo(a = SomeEnum.ENUM_KEY)
pass
【问题讨论】:
-
SomeEnum.ENUM_KEY是SomeEnum的一个实例,它是可变的。SomeEnum.ENUM_KEY.value(SomeClass()) (一般来说)也是可变的。通过可变性,你指的是哪个对象?更具体地说,例如,如果SomeClass = int,您的问题是否仍然存在?顺便说一下,第二个代码 sn-p 不是有效的 python 代码。请检查语法。 -
默认参数的类型是什么并不重要。重要的是函数是否在没有意识到的情况下改变了它全部未来对该函数的调用将看到突变。
-
如果
foo将a视为不可变值,则使用[]作为a的默认参数值没有问题。