Python中列表中随机样本函数的语法

时间:2013-11-23 15:50:08

标签: python random psychopy

我正在尝试使用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)()

2 个答案:

答案 0 :(得分:2)

尝试:

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

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

答案 1 :(得分: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]()