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