今天学习爬虫Scrapy框架搭建的时候,了解了yield的用法。了解一个东西,无外乎 WHAT? HOW? WHY?

WHAT

yield英文意思是屈服,退位,放弃。额。。。其实它是Python中的一个关键字。通俗的来说,你再IDLE中打出来会变黄。(>)<)

HOW

二话不说先举个例子

def test_yield(n):
for i in range(n):
yield i**2 for i in test_yield(5):
print(i, " ",end="")

输出什么?自己试试,还是先说吧



你就坐不住了,这这和return有什么区别呢????

下面再写个return

def sqare(n):
ls = [i**2 for i in range(n)]
return ls for i in sqare(5):
print(i, " ",end="")

输出什么?还用说吗 >)



没错我初见的yield就是这样用的,看似和return差不多

前方高能

FALSE WHY

既然和return用法差不多,那why yield????

那么你可以试试这样

def sqare(n):
ls = [i**2 for i in range(n)]
return ls for i in sqare(1000000000000000000000000000000):
print(i, " ",end="")

傻脸了吧 : )

你再试试这样

def yield_test(n):
for i in range(n):
yield i**2 for i in yield_test(1000000000000000000000000000000):
print(i, " ",end="")

是不是感觉良好的不得不的了哈哈哈

原理还要说吗,还是说说,避免我以后忘了。: )

TRUE WHY

Advantage 1

yield关键字它可以在循环执行一次后冻结循环,冻结!!! !不等于重新开始!!!

所以当你用for循环调用它的时候,它可以一次次的输出,不像return一样非要一次性输出,大大加强了程序可观性。

Advantage 2

yield的一次次输出,让它输出的结果只占用一个元素的存储空间

RETURN是兄弟

其实没有什么可比性

适当的时候,选用适当的关键字,所有的所有,才构成了最great的程序

YIELD深层次

yield关键字用的地方很多很多,Scrapy爬虫框架什么的,继续学习。

人生若只如初见,何事秋风悲画扇。

python人生如初见之初见yield的更多相关文章

  1. [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source …

    [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source - [Pyth ...

  2. 【Python注意事项】如何理解python中间generator functions和yield表情

    本篇记录自己的笔记Python的generator functions和yield理解表达式. 1. Generator Functions Python支持的generator functions语 ...

  3. Python中的生成器与yield

    对于python中的yield有些疑惑,然后在StackOverflow上看到了一篇回答,所以搬运过来了,英文好的直接看原文吧. 可迭代对象 当你创建一个列表的时候,你可以一个接一个地读取其中的项.一 ...

  4. Python协程:从yield/send到async/await

    这个文章理好了脉落. http://python.jobbole.com/86069/ 我练 习了一番,感受好了很多... Python由于众所周知的GIL的原因,导致其线程无法发挥多核的并行计算能力 ...

  5. 转-[Python 学习]2.5版yield之学习心得

    在 shhgs 发布了关于< Py 2.5 what’s new 之 yield>之后,原来我不是特别关注 yield 的用法,因为对于2.3中加入的yield相对来说功能简单,它是作为一 ...

  6. Python并发实践_02_通过yield实现协程

    python中实现并发的方式有很多种,通过多进程并发可以真正利用多核资源,而多线程并发则实现了进程内资源的共享,然而Python中由于GIL的存在,多线程是没有办法真正实现多核资源的. 对于计算密集型 ...

  7. Python入门之迭代器/生成器/yield的表达方式/面向过程编程

    本章内容 迭代器 面向过程编程 一.什么是迭代 二.什么是迭代器 三.迭代器演示和举例 四.生成器yield基础 五.生成器yield的表达式形式 六.面向过程编程 ================= ...

  8. 新手学python(3):yield与序列化

    1 Yield生成器 Yield是我在其他语言中没有见过的一个属性,算是python的一大特色,用好之后可以使代码更简洁.考虑一个简单的例子,文件的遍历.要遍历一个目录下的所有文件需要递归的操作.如果 ...

  9. python迭代器与生成器及yield

    一.迭代器(itertor) 1.可迭代: 在Python中如果一个对象有__iter__()方法或__getitem__()方法,则称这个对象是可迭代的(iterable). 其中__iter__( ...

随机推荐

  1. 【亲测有效】vs2017无法断点

    解决方案: 一:设置为Debug模式 二:[工具]--[选项]--[调试]--[常规],取消打钩[要求源文件与原始版本完全匹配]

  2. Python——hashlib(加密模块)

    主要用于对字符串的加密,最常用的为MD5加密: import hashlib def get_md5(data): obj = hashlib.md5() obj.update(data.encode ...

  3. shiro系列五、shiro密码MD5加密

    Shiro-密码的MD5加密   1.密码的加密 在数据表中存的密码不应该是123456,而应该是123456加密之后的字符串,而且还要求这个加密算法是不可逆的,即由加密后的字符串不能反推回来原来的密 ...

  4. 【TestNG】使用代码方式调用TestNG用例执行

    TestNG的用例除了直接运行之外,还可以使用代码来调用,这样做的好处在于我们可以将其嵌入其他代码中,来执行这些TestNG用例,方法如下: 1.直接调用用例类 范例:定义了两个测试用例类为Depen ...

  5. cdh的web管理界面503

    503 Service Unavailable No server is available to handle this request.       重启 agent  以及 server   

  6. kali linux Desktop Environemt types and kali linux install virualbox

    1.we know the kali linux desktop environmet can also be costomized ,Desktop environmet can use GNOME ...

  7. Vue 前后端分离系统中遇到跨域问题

    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS I  Your application is running ...

  8. 【搜索/tarjan找环】zznu-简单环路

    简单环路 题目描述 有一个N x M 大小的地图,地图中的每个单元包含一个大写字母. 若两个相邻的(这里的相邻指“上下左右”相邻)点上的字母相同,我们可以用线段连接这两个点. 若存在一个包含同一字母的 ...

  9. hihocoder 1931 最短管道距离

    描述 在一张2D地图上有N座城市,坐标依次是(X1, Y1), (X2, Y2), ... (XN, YN). 现在H国要修建一条平行于X轴的天然气主管道.这条管道非常长,可以认为是一条平行于X轴的直 ...

  10. 模拟webpack 实现自己的打包工具

    本框架模拟webpack打包工具 详细代码个步骤请看git地址:https://github.com/jiangzhenfei/easy-webpack 创建package.json { " ...