0

我正在尝试使用 Python 中的 random.sample 函数(特别是 Psychopy)从函数列表中随机抽样。这是我的代码:

from psychopy import visual, core, event, gui
import random
import string

win = visual.Window([800,600], monitor="testMonitor", units = "pix", color="white",fullscr=False)    

def test1():
    welcome = "blah1"
    welcometext = visual.TextStim(win, text=welcome, wrapWidth=500, color="black")
    welcometext.draw()
    win.flip()
    event.waitKeys()

def test2():
    welcome = "blah2"
    welcometext = visual.TextStim(win, text=welcome, wrapWidth=500, color="black")
    welcometext.draw()
    win.flip()
    event.waitKeys()

def test3():
    welcome = "blah3"
    welcometext = visual.TextStim(win, text=welcome, wrapWidth=500, color="black")
    welcometext.draw()
    win.flip()
    event.waitKeys()

mylist = [test1, test2, test3]
random_sample = random.sample(mylist,1)()

当我尝试运行此代码时,我得到:

TypeError: 'list' object is not callable

对于为什么 random.sample 在这里不起作用,我有点迷茫,所以非常感谢任何帮助。另外,作为旁注,如果我将最后一点代码更改为使用 random.choice,那么这个函数似乎工作得很好:

mylist = [test1, test2, test3]
random_choice = random.choice(mylist)()
4

2 回答 2

2

尝试:

random_sample = random.sample(mylist, 1)[0]()

random.sample返回一个列表,因此您可以选择第一个元素并将其称为function.

于 2013-11-23T15:53:03.203 回答
0

如上面的评论所述:

random_sample = random.sample(mylist,1)()

最后一个()是调用random.sample(mylist,1).

相当于写:

random_sample = random.sample(mylist,1)
random_sample = random_sample()

由于此时的 random_sample 是指一个列表,所以它是不可调用的。

您需要调用列表中的元素,而不是列表,因此应为:

random_sample = random.sample(mylist,1)[0]()
于 2013-11-23T15:55:43.863 回答