从列表问题运行函数

时间:2014-04-02 04:16:31

标签: python

我想知道如何从列表中运行函数,并使用随机模块调用它们,但我似乎无法让它工作,任何人都可以帮忙吗?以下是一个例子。

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。

我问这个问题的全部原因是因为我正在创建一个基于文本的世界生成器,我想为生物群系定义函数,然后在世界生成时从列表中随机调用它们。

1 个答案:

答案 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不可调用,这就是您收到错误的原因。