2013-11-23 7 views
0

Я пытаюсь использовать функцию random.sample в Python (в частности, Psychopy) для случайного выбора из списка функций. Вот мой код:Синтаксис случайных функций выборки из списка в 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

Try:

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