1
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 会改变。我的问题是,为什么种子在一种情况下发生变化而不是另一种情况?

4

2 回答 2

6

它在这里做出选择

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

由于您正在调用该函数。评估此行后,您的 dict 将变为如下所示:

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

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

known_commands = {
    "boo"  : lambda: random.choice(["Winter is coming...","SURPRISE!","Mazel tov!"]),
    "xyzzy": xyzzy,
}
于 2012-04-12T18:20:53.840 回答
1

in的booknown_commands不指向函数,它指向的结果值random.choice,在构造字典时只执行了一次。将其更改为:

"boo": lambda: random.choice(["Winter is coming...", "SURPRISE!", "Mazel tov!"])
于 2012-04-12T18:19:51.437 回答