我想知道如何从列表中运行函数,并使用随机模块调用它们,但我似乎无法让它工作,任何人都可以帮忙吗?以下是一个例子。
import random
def word1():
print "Hello"
def word2():
print "Hello again"
wordFunctList = [word1, word2]
def run():
printWord = random.randint(1, len(wordFunctList))-1
wordFunctList[printWord]
run()
run()
所以我想在无限循环中这样做,但我得到的所有输出都是
Hello
Hello again
然后该程序没有做任何其他事情?谁能帮我?顺便说一下,我正在使用应用程序pythonista。我也是编程NOOB。我刚刚开始使用python。
我问这个问题的全部原因是因为我正在创建一个基于文本的世界生成器,我想为生物群系定义函数,然后在世界生成时从列表中随机调用它们。
答案 0 :(得分:3)
我这样做:
import random
def word1():
print "Hello"
def word2():
print "Hello again"
wordFunctList = [word1, word2]
def run():
# Infinite loop, instead of recursion
while True:
# Choose the function randomly from the list and call it
random.choice(wordFunctList)()
run()
阅读this answer。它解释了为什么你应该避免尾递归并改为使用无限循环。
对random.choice(wordFunctList)()
的解释:
wordFunctList
是一个包含函数对象的列表:
>>> print wordFunctList
[<function word1 at 0x7fcb1f453c08>, <function word2 at 0x7fcb1f453c80>]
random.choice(wordFunctList)
选择该函数并将其返回:
>>> random.choice(wordFunctList)
<function word2 at 0x7f9ce040dc80>
random.choice(wordFunctList)()
调用返回的函数:
>>> print random.choice(wordFunctList)()
Hello again # Outputs during the function call
None # Returned value
使用额外的括号(random.choice(wordFunctList)()()
),您调用函数的返回值,即None
,但None
不可调用,这就是您收到错误的原因。