python - python中的random.choice([x, y, z]),为什么种子没有改变?

标签 python random seeding

known_commands = {
    "boo"  : random.choice(["Winter is coming...","SURPRISE!","Mazel tov!"]),
    "xyzzy": xyzzy,
}


def xyzzy(self):

    print random.choice(["Winter is coming...","SURPRISE!","Mazel tov!"])
    return

对于一个类,我们正在用 Python 制作一个“婴儿僵尸网络”。因此,如果我调用命令 xyzzy 或 boo,它们将每 3 秒执行一次(直到我告诉它们停止)。当我调用 boo 时,它会选择一个随机元素,但它每 3 秒打印一次相同的随机元素。当我调用 xyzzy 时,它每 3 秒打印一个新的随机元素。

据我了解,这意味着种子不会因 boo 而改变,但会因 xzyyz 而改变。我的问题是,为什么种子在一种情况下会发生变化而在另一种情况下不会发生变化?

最佳答案

它在这里做出选择

"boo"  : random.choice(["Winter is coming...","SURPRISE!","Mazel tov!"]),

因为您正在调用该函数。评估此行后,您的字典将变成如下所示:

known_commands = {
    "boo" : "SURPRISE!",
    "xyzzy" : xyzzy,
}

但是 xyzzy 每次都会得到一个随机字符串,因为每次调用时都会在函数中做出选择。为了每次都为 boo 获取一个随机字符串,您应该创建一个函数或一个 lambda。使用 lambda 看起来像这样:

known_commands = {
    "boo"  : lambda: random.choice(["Winter is coming...","SURPRISE!","Mazel tov!"]),
    "xyzzy": xyzzy,
}

关于python - python中的random.choice([x, y, z]),为什么种子没有改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10129355/

相关文章:

python - Google 应用程序引擎模块 :Confused about routing (dispatch. yaml)

python - drawControl 未收到正确的 QStyleOption

haskell - 试图找出 Haskell 中的 `random` 函数

php - Laravel - Eloquent 或 Fluent 随机行

sequelize.js - 每次种子脚本运行时,使用 Sequelize 向 PSQL 的种子数据具有不同的 ID

Laravel 工厂/播种器创建指定的双记录

xml - OpenERP,用 XML 播种 Many2Many 关系?

python xpath 如何在我的xpath中添加特殊字符?

python - 在另一个文件中使用 Asyncio 循环引用

random - 如何获得xilinx FPGA(spartan6系列)SRAM随机值?