6 ms·
I'm not positive, but I think it saves the need to create a new execution frame for each lambda call, since the whole loop executes in single frame used by the
by warbiscuit 10y ago
I'm not positive, but I think it saves the need to create a new execution frame for each lambda call, since the whole loop executes in single frame used by the comprehension.
In theory I suppose the VM could have a map() implementation which opportunistically extracts the code from a lambda and inlines them when possible; but doubt CPython does that. OTOH, I'd be surprised if PyPy doesn't do something like that.
- fovc 10y agoSince Python 3, both generators and lists create a new stack frame. [1] (2nd to last paragraph) [1] http://python-history.blogspot.com/2010/06/from-list-comprehensions-to-generator.html http://python-history.blogspot.com/2010/06/from-list-compreh...
- warbiscuit 10y agoI'm not meaning when the comprehension is invoked, but during each iteration of the loop within the comprehension. When doing something like `map(lambda x: 2+x, range(100))`, there will be 101 frames created: the outer frame, and 100 for each invocation of the lambda. Whereas `[2+x for x in range(100)]` will only create 2: one for the outer frame, and one for the comprehension.