0

関数のリストからランダムにサンプリングするために、Python (具体的には Psychopy) で random.sample 関数を使用しようとしています。これが私のコードです:

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)()
4

2 に答える 2

2

試す:

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

random.sampleはリストを返すので、最初の要素を選択して として呼び出すことができfunctionます。

于 2013-11-23T15:53:03.203 に答える
0

上記のコメントで述べたように:

random_sample = random.sample(mylist,1)()

最後()は return の呼び出しですrandom.sample(mylist,1)

これは次のように書くことと同じです:

random_sample = random.sample(mylist,1)
random_sample = random_sample()

この時点での random_sample はリストを参照しているため、呼び出し可能ではありません。

リストではなくリスト内の要素を呼び出す必要があるため、次のようになります。

random_sample = random.sample(mylist,1)[0]()
于 2013-11-23T15:55:43.863 に答える