dil*_*ert 21 python list-comprehension
哪一个是在python中进行列表理解的更好方法(在计算时间和cpu周期方面).在示例(1)中是在每次迭代中计算的值f(r)还是一次评估并缓存?
y = [x*f(r) for x in xlist]
c = f(r)
y = [x*c for x in xlist]
哪里
def f(r):
... some arbitrary function ...
Run Code Online (Sandbox Code Playgroud)
utd*_*mir 12
它评估每次迭代.看这个:
>>> def f():
... print("func")
...
>>> [f() for i in range(4)]
func
func
func
func
[None, None, None, None]
Run Code Online (Sandbox Code Playgroud)
如你所说,如果f()没有副作用,将返回值存储在变量上并使用该变量则是一个更快的解决方案.
这是一个简单的方法来找出:
>>> def f():
... print "called"
... return 1
...
>>> [1+f() for x in xrange(5)]
called
called
called
called
called
[2, 2, 2, 2, 2]
Run Code Online (Sandbox Code Playgroud)
所以是的,如果函数每次都相同,那么最好在列表理解之外调用一次.