Python中的可视化模块分配对象

0 投票
1 回答
826 浏览
提问于 2025-04-15 17:39

我刚开始学习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。这个变化会立即在屏幕上显示出来。运行完这一行后,你会看到球体出现在窗口的左边。

所以,动画是通过改变对象的数值来实现的。

撰写回答