有人可以解释这个生成器代码在做什么吗?
>>> def f():
... return next((i for i in [{'a':1, 'b':2}, {'c':3, 'd':4}]))
...
>>> t = f()
>>> for item in t:
... print(item)
...
a
b
>>> t
{'a': 1, 'b': 2}
>>>
实际上,这个函数是否设计为只返回一个值?
答案 0 :(得分:2)
有人可以解释一下这个生成器代码在做什么吗?
(i for i in [{'a':1, 'b':2}, {'c':3, 'd':4}])
这是生成器理解的语法。尝试迭代迭代:
In [205]: for x in (i for i in [{'a':1, 'b':2}, {'c':3, 'd':4}]):
...: print(x)
...:
{'b': 2, 'a': 1}
{'d': 4, 'c': 3}
next()
函数返回生成器中的下一个项目。来自next
的文档:
next(iterator[, default])
通过调用其
next()
方法从迭代器中检索下一个项目。 如果给出了default,则在迭代器耗尽时返回, 否则会引发StopIteration。
在这种情况下,返回的是
{'a':1, 'b':2}
这是一本字典。如果您在此处使用for
循环,则会对密钥进行迭代,因此您依次打印出a
和b
(如果您使用的是python3)。 6)因为密钥的顺序是有保证的。在较旧的python版本中,您将以任意顺序打印键。
实际上,这个函数是否设计为只返回一个值?
是的。作为练习,请尝试将return
更改为yield from
,如下所示:
def f():
yield from (i for i in [{'a':1, 'b':2}, {'c':3, 'd':4}]))