我有一个测试 PsychoPy Builder 脚本,我用它来调查一些违反直觉的行为。结构是四个例程:
“初始化”,不在循环中,“开始实验”中的以下代码:
x = 0
y = 0
z = 0
foo = [0, 0, 0]
“一个”,在一个循环中,“结束例程”中的以下代码:
x = x + 1
foo[0] = foo[0] + 1
thisExp.addData("x", x)
thisExp.addData("y", y)
thisExp.addData("z", z)
thisExp.addData("foo", foo)
“二”,在一个循环中,“结束例程”中的以下代码:
y = y + 2
foo[1] = foo[1] + 2
thisExp.addData("x", x)
thisExp.addData("y", y)
thisExp.addData("z", z)
thisExp.addData("fooY", foo[1])
thisExp.addData("foo", foo)
“三”,在一个循环中,“结束例程”中的以下代码:
z = z + 3
foo[2] = foo[2] + 3
thisExp.addData("x", x)
thisExp.addData("y", y)
thisExp.addData("z", z)
thisExp.addData("foo", foo)
没有其他代码,没有其他组件。例程“一”、“二”和“三”形成按该顺序执行五次的循环。CSV输出文件的相关列如下:
trials.thisRepN trials.thisTrialN trials.thisN trials.thisIndex x y z foo fooY
0 0 0 0 1 2 3 [5, 10, 15] 2
1 0 1 0 2 4 6 [5, 10, 15] 4
2 0 2 0 3 6 9 [5, 10, 15] 6
3 0 3 0 4 8 12 [5, 10, 15] 8
4 0 4 0 5 10 15 [5, 10, 15] 10
这是预期的输出吗?如果是这样,为什么?请注意,单个变量 x、y 和 z 每次循环都显示更新的值(在循环结束时),而列表 foo 仅显示循环迭代所有五次后的最终值,但它在每一行中都显示了这一点。但是调用列表中的单个元素会显示为单个变量。
这背后的逻辑和原理是什么?
有没有办法让列表输出像其他人一样执行?
有没有办法强制输出在调用 addData() 时捕获/显示这些变量中的任何一个,而不是等到循环结束?