2013-11-23 51 views
0

我想在Python(特别是Psychopy)中使用random.sample函数从函数列表中随机抽样。这里是我的代码:从Python中的列表中随机采样函数的语法

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)() 
+1

'random.sample()'返回一个列表。 – stranac

回答

2

尝试:

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

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

+0

感谢您的帮助。 – user3021975

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]() 
+0

欢呼的解释。 – user3021975