论述Python的yield的关键词的用法的高头文章着实不少,读得人云里雾里。实际上,该关键词比较简单,懂得return就懂得yield。
在Python中return关键词与yiled关键词是孪生兄弟。“return”是“return-and-stop”,而yield则是“return-but-continue”。下面从具体案例中分析:
定义下面的程序获取数字列表:
def num_list(n):
for i in range(n):
return i
运行:
In [5]: num_list(3)
Out[5]: 0
看到没,用return只会返回一个结果。
用yield改写上面的程序:
In [10]: def num_list(n):
...: for i in range(n):
...: yield i
...:
In [11]: num_list(3)
Out[11]:
In [12]: list(num_list(3))
Out[12]: [0, 1, 2]
现在,我们得到了完整的数字列表。
与return运行一次并退出不同,yield将会运行我们指定的次数。因此,可以简单将return理解为return-one-of-them,yield为return-all-of-them。这被称之为iterable。
yield程序也能用return改写:
In [15]: def num_list(n):
...: result = []
...: for i in range(n):
...: result.append(i)
...: return result
In [16]: num_list(3)
Out[16]: [0, 1, 2]
这就是yield的核心思路。
然而,yield返回的结果与return返回的结果颇为不同。yiled输出列表[0, 1, 2],却只能提取一次其中的数值,因而也就有了新的名字generator。
我们简单做这样的比喻:
页面更新:2024-04-30
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号