在for循环中使用未命名的对象时遇到问题

时间:2013-10-02 22:20:10

标签: python list for-loop pygame nested

代码来自一个程序,该程序使用Python和Pygame为在屏幕上移动的球提供动画。所有类和函数都只处理数据操作,这里的主类是Particle。所有实际的构造和函数调用都发生在以下几行中:

number_of_particles = 10
my_particles = []
for n in range(number_of_particles):
    size = random.randint(20, 20)
    x = random.randint(size, width-size)
    y = random.randint(size, height-size)
    color = (100,0,100)
    particle = Particle(x, y, color, size)
    particle.speed = 1
    particle.angle = random.uniform(0, math.pi*2)
    my_particles.append(particle)

running = True
while running:
    screen.fill(background_color)
    for i, particle in enumerate(my_particles):
        particle.move()
        particle.getnumber()
        particle.bounce()
        for particle2 in my_particles[i+3:]:            
            collide(particle, particle2)
        particle.display()
pygame.display.flip()`

我理解该列表保存了内存中对象的位置,并且用于创建它们的for循环没有命名它们,但确实为它们提供了单独的参数。创建循环之后的函数循环遍历所有对象并更新它们的状态,其中碰撞函数发生在循环内部,循环遍历在功能循环中未迭代的所有其他粒子。我不明白的是它是如何选择这些对象并引用它们而不显式调用它们的名称(这是不存在的)或它们的相对索引,因为有10个项目。这些代码在这些循环中实际执行的是什么,最后在这些循环中呢?

3 个答案:

答案 0 :(得分:0)

for循环将列表中的每个项目分配给变量particle2

此处的规范示例依次将每个值分配给变量item

items = ['a', 'b', 3]
for item in items:
    print item

答案 1 :(得分:0)

在Python中,名称只是对象的句柄。您可以通过多种方式引用同一个对象,而不仅仅是使用其名称。

答案 2 :(得分:0)

for循环/语句拉出每个项目(依次),将其分配给您提供的变量名称,然后执行 suite 。 for语句仅适用于可迭代对象。 for循环/语句不知道列表中的内容,它实际上并不关心。我正在解释文档,也许看看它们会有所帮助 - The for statement

相关问题