Mic*_*bor 0 python performance list
我正在写一个游戏,而在True中:循环我有一个重新绘制游戏状态的代码.
我有几个不同种类的物品清单(宇宙飞船,横梁,星星) - 所有这些都是为了提高性能.
我需要把它们全部画出来.我可以:
for spaceship in spaceships:
screen.blit(spaceship.image, (spaceship.x, spaceship.y))
for beam in beams:
screen.blit(beam.image, (beam.x, beam.y))
...
Run Code Online (Sandbox Code Playgroud)
但我觉得这有点违背DRY原则.我觉得它可以做得更好.
我需要的是这样的结构:
for actor in spaceships + beams + stars:
actor.move()
screen.blit(actor.image, (actor.x, actor.y))
Run Code Online (Sandbox Code Playgroud)
但是一个人不会加入它们(也不会做任何会降低性能的事情).你的想法?
使用chain从itertools模块:
from itertools import chain
for actor in chain(spaceships, beams, stars):
actor.move()
screen.blit(actor.image, (actor.x, actor.y))
Run Code Online (Sandbox Code Playgroud)
来自文档:
创建一个迭代器,它返回第一个iterable中的元素,直到它耗尽,然后进入下一个iterable,直到所有的iterables都用完为止.用于将连续序列作为单个序列处理.
chain 使用延迟评估(例如,没有创建中间列表),因此不会有任何性能下降.
| 归档时间: |
|
| 查看次数: |
38 次 |
| 最近记录: |