今天学习爬虫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. 安卓开发之生成cache目录和files目录

    package com.lidaochen.test; import android.os.Bundle; import android.support.v7.app.AppCompatActivit ...

  2. Web编程规范之三层架构设计规范

    本篇是我对Web开发规范中关于三层架构设计规范的一些浅见.虽然三层架构是比较普通,也比较简单的架构设计模式.但是随着业务的增长,涉及到的对象越来越多,处理的逻辑越来越复杂.这其中难免会出现设计不当,从 ...

  3. nginx实现fastcgi反向代理

    实现FastCGI: CGI的由来:最早的Web服务器只能简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html文件,但是后期随着网站功能增多网站开发也越 ...

  4. Linux命令——rpm

    翻译自:20 Practical Examples of RPM Commands in Linux 国内译文:20个Linux中RPM命令的实际示例 前言 包管理机制——RPM.dpkg rpm本身 ...

  5. 《构建之法》第五次作业——Alpha项目测试

    博客开头 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign?page=6 这个作业要求在 ...

  6. JDK源码那些事儿之PriorityBlockingQueue

    今天继续说一说阻塞队列的实现,今天的主角就是优先级阻塞队列PriorityBlockingQueue,从命名上看觉得应该是有序的,毕竟是优先级队列,那么实际上是什么情况,我们一起看下其内部实现,提前说 ...

  7. Mac系统上,Firefox和Selenium不兼容的情况

    解决办法,检查环境: Python 2.7.10 Firefox 46版本 Selenium 2.53.6 注意:将Firefox自动更新关闭,否则可能会出现自动升级以后无法执行Selenium用例的 ...

  8. 通过trace分析优化器如何选择执行计划

    1. mysql> show variables like "optimizer_trace%"\G;*************************** 1. row * ...

  9. vue 自定义全局组件

  10. ServletRequest、 HttpServletRequest、Request的联系与区别

    一. servlet理论上可以处理多种形式的请求响应形式 http只是其中之一 所以HttpServletRequest HttpServletResponse分别是ServletRequest和Se ...