Skip to main content
 首页 » 编程设计

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

2025年05月04日15softidea

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, 
}