Синтаксис функций случайной выборки из списка в Python

Я пытаюсь использовать функцию random.sample в Python (в частности, 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)()

person user3021975    schedule 23.11.2013    source источник
comment
random.sample() возвращает список.   -  person stranac    schedule 23.11.2013


Ответы (2)


Пытаться:

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

random.sample возвращает список, поэтому вы можете выбрать первый элемент и вызвать его как function.

person Christian    schedule 23.11.2013

Как было отмечено в комментарии выше:

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]()
person selllikesybok    schedule 23.11.2013
comment
Спасибо за объяснение. - person user3021975; 24.11.2013