我有一套功能:
functions=set(...)
Run Code Online (Sandbox Code Playgroud)
所有功能都需要一个参数x.
做python的最有效方法是做类似的事情:
for function in functions:
function(x)
Run Code Online (Sandbox Code Playgroud)
你给的代码,
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更加明显.但这不是这个问题的关键所在.