【发布时间】:2018-05-01 09:38:58
【问题描述】:
我已经创建了这样的Enum 对象:
class Gender(Enum):
FEMALE = 'female'
MALE = 'male'
RANDOM = random.choice([FEMALE, MALE])
我每次都想得到真正随机的值,但它不起作用:
>>> class Gender(Enum):
... MALE = 'male'
... FEMALE = 'female'
... RANDOM = choice([MALE, FEMALE])
...
>>> Gender.RANDOM
<Gender.MALE: 'male'>
>>> Gender.RANDOM
<Gender.MALE: 'male'>
>>> Gender.RANDOM
<Gender.MALE: 'male'>
>>> Gender.RANDOM
<Gender.MALE: 'male'>
我也尝试过使用 lambda,但它看起来不太好,虽然它可以工作:
Gender.RANDOM()
有没有其他方法可以在不使用 lambda 表达式的情况下每次获取随机值?
我们使用这个枚举对象作为一些方法的参数的默认值,这就是为什么它应该是一个属性,而不是一个函数,因为当我们使用Gender.FEMALE它不是一个函数,它是一个属性和Gender.RANDOM也应该是一个属性:
def full_name(gender=Gender.FEMALE):
...
def full_name(gender=Gender.RANDOM):
...
【问题讨论】:
-
默认属性只计算一次(定义函数时),所以随机值只会随机一次,每次调用该函数都会得到相同的初始值。
-
这是我想改变的常见行为。
-
这是 Python 的基本行为,您无法更改。
-
我指的是解决方法。当然,我无法更改 Python,我也不想这样做。
标签: python random lambda enums