在Python中调用函数集的有效方法

Eze*_*iel 0 python iteration

我有一套功能:

functions=set(...)
Run Code Online (Sandbox Code Playgroud)

所有功能都需要一个参数x.

做python的最有效方法是做类似的事情:

for function in functions:
   function(x)
Run Code Online (Sandbox Code Playgroud)

Ste*_*202 7

你给的代码,

for function in functions:
    function(x)
Run Code Online (Sandbox Code Playgroud)

...似乎没有对调用的结果做任何事情function(x).如果确实如此,意味着这些功能被称为副作用,那么就没有更多的pythonic替代品了.只需保留您的代码即可.特别是在这里带回家的重点是

                               在列表推导中避免使用具有副作用的函数.

至于效率:我希望使用其他任何东西而不是简单的循环都不会改善运行时.如有疑问,请使用timeit.例如,以下测试似乎表明常规for循环比列表理解更快.(我不愿意从这个测试得出任何一般性的结论,思考):

>>> timeit.Timer('[f(20) for f in functions]', 'functions = [lambda n: i * n for i in range(100)]').repeat()
[44.727972984313965, 44.752119779586792, 44.577917814254761]
>>> timeit.Timer('for f in functions: f(20)', 'functions = [lambda n: i * n for i in range(100)]').repeat()
[40.320928812026978, 40.491761207580566, 40.303879022598267]
Run Code Online (Sandbox Code Playgroud)

但同样,即使这些测试表明列表推导更快,但仍然存在的问题是,为了便于阅读,在涉及副作用时不应使用它们.


  :好吧,我写了for f in functions,所以差异很大,function而且functions更加明显.但这不是这个问题的关键所在.

  • 为"避免列表推导中的副作用功能"提醒+1. (3认同)