Pythonic方法调用类函数如果我有一个实例列表

Ric*_*ard 3 python class

所以我有一个包含一些类实例的列表.

随着时间的推移,我希望在每一步都能调用run类的方法.

到目前为止,我有以下内容.但是有没有更好或更多的Pythonic方法来实现for c in objs:阻止?

谢谢!

#!/usr/bin/python

class the_class:
    def __init__(self):
        self.num=1
    def run(self):
        self.num+=1

def main():
    objs=[]
    objs.append(the_class())
    objs.append(the_class())
    objs.append(the_class())

    for t in range(10):
        for c in objs:
            c.run()

    print objs[0].num

main()
Run Code Online (Sandbox Code Playgroud)

Rus*_*ove 10

不,你拥有的是完全合理的和Pythonic.

列表理解语法:

[c.run() for c in objs]
Run Code Online (Sandbox Code Playgroud)

为您节省一行,但使用列表推导副作用通常被认为是不好的风格.

  • 说真的,如果你想为了单行编写它,请使用Code Golf并将实际编程留给成年人. (10认同)
  • 如果run()函数的运行时非常重要,则循环时间将被淹没.如果run()函数的运行时很简单,那么循环的总运行时间是微不足道的,除非集合的大小很大,在这种情况下,Python可能不是最好的语言选择.为了性能,在这里使用除了简单循环之外的任何东西是过早优化. (3认同)
  • 我实际上听说通常不适合使用list comp来调用方法的副作用 (2认同)
  • 生成器表达式上的`any`可能比正常的`for`循环更快,所以有一个合理的理由使用它,如果它在某个地方,微优化实际上可以帮助. (2认同)

Gar*_*tty 6

不,你有什么是完美的.

在此处使用列表推导或映射会使您的代码不那么清晰,难以阅读.我强烈建议不要这样做.

列表理解旨在创建列表.如果要进行循环,请使用循环.

即使您确实需要对此进行优化(并且使用列表补偿或映射也不太可能是有效的优化),然后在证明它是瓶颈时执行此操作.可读性是第一位的,只在您需要的地方进行优化.