Python中的可视化模块分配对象
我刚开始学习Python中的Visual模块,对它是怎么给对象赋值的还不是很明白。
from visual import *
stars=[]
galaxies=[]
for i in range(10):
stars+=[sphere('pos,radius,color.....')]
for j in range(20):
galaxies+=[sphere('pos,radius,color......')]
for k in range(30):
stars[k].pos=position[k]
galaxies[k].pos=G_position[k]
我就是搞不懂,通常情况下,当Python执行这段代码时,列表应该在for循环结束后就完成了,但在导入了Visual模块后,那些球体却能在屏幕上显示出来,并且在最后一个for循环的每次迭代中更新它们的位置!...
或者我的问题可能和Visual模块里的“show()”、“print”和“开始动画”的语句有关,它们是怎么工作的?我该怎么使用它们呢?
就像如果我在for循环中或结束后加上print语句一样。
非常感谢!
1 个回答
1
首先,你的代码是通过列表拼接来往列表里添加东西。其实,用列表的 .append()
方法会更好。此外,最后一个循环可以直接遍历对象,而不是用索引,这样写起来更优雅,也更容易理解。
下面的伪代码和你的代码是等价的,但已经做了上述的修改:
from visual import *
stars = []
galaxies = []
for i in range(10):
stars.append(sphere(...))
for j in range(20):
galaxies.append(sphere(...))
for star, galaxy, starpos, galaxypos in zip(stars, galaxies,
position, G_position):
star.pos = starpos
galaxy.pos = galaxypos
说完这些,我可以解释一下视觉模块是怎么工作的。
视觉模块会在对象发生变化时立即更新屏幕。动画就是通过这种实时的变化来实现的,不需要调用 show()
或 start_animation()
,一切都是自动进行的。你可以在 Python 命令行上运行下面的例子:
>>> from visual import sphere
>>> s = sphere()
这一行代码创建了一个球体,并且打开了一个窗口,球体已经在窗口里显示出来了!!!
>>> s.x = -100
这一行代码将球体在 x 轴上的位置改为 -100
。这个变化会立即在屏幕上显示出来。运行完这一行后,你会看到球体出现在窗口的左边。
所以,动画是通过改变对象的数值来实现的。