Skip to main content
 首页 » 编程设计

python之Lambda 作为 Python 中的迭代器在第一次迭代时返回函数对象

2025年05月04日14itcoder

我有这段我无法理解的代码片段:

>>> l = lambda: -4, 'c', 0 
>>> i = iter(l) 
>>> i 
<tuple_iterator object at 0x00700CD0> 
>>> next(i) 
<function <lambda> at 0x0070A4F8> 
>>> next(i) 
'c' 
>>> next(i) 
0 
>>> next(i) 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
StopIteration 
>>> 

为什么它在第一次迭代时返回 lambda 对象,而不是 -4?

请您参考如下方法:

我认为您可能误解了l 是什么。

l 是 3 个元素的元组:

  • 返回 -4 的 lambda
  • 字符串c
  • 整数0

当您创建迭代元组的迭代器时,对 next 的第一次调用当然会给您一个 lambda!

也许你打算调用 lambda:

next(i)() 

或者您可能打算像这样声明 l:

l = lambda: (-4, 'c', 0) # you might think you don't need the parentheses, but you do 

返回元组的 lambda。

然后执行iter(l())。