2012-04-12 108 views
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中制作“baby botnet”的课程。所以,如果我调用xyzzy或boo命令,它们每3秒执行一次(直到我告诉他们停止)。当我调用boo时,它会选择一个随机元素,但它每3秒打印一次相同的随机元素。当我调用xyzzy时,它每3秒打印一个新的随机元素。python中的random.choice([x,y,z]),为什么种子没有改变?

根据我的理解,这意味着种子不会改变嘘声,但它确实会改变为xzyyz。我的问题是,为什么种子会在一种情况下而不是另一种变化?

回答

6

这使得这里

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

选择既然你调用该函数。这条线被评估后,您的字典变得像这样:

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

但XYZZY每次得到一个随机字符串,既然选择了在函数每次调用时提出。为了每次都得到一个随机的字符串,你应该做一个函数或lambda。它看起来像一个拉姆达:

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

哦,我明白了。谢谢 :) – tparf 2012-04-13 16:01:27

1

known_commands中的boo键没有指向某个函数,而是指向结果值random.choice,该结果值在构建字典时只执行一次。将其更改为:

"boo": lambda: random.choice(["Winter is coming...", "SURPRISE!", "Mazel tov!"]) 
相关问题