[转载] 【零基础学爬虫】python中的yield详解

参考链接: 什么时候在Python中使用yield而不是return

python中的yield功能比较强大,什么意思呢?如果一个函数f内使用了yield关键词,那么该函数就可以这样使用: 

for item in f(***):

    ****

 

也就是包含yield关键词的函数可以在for循环中迭代,说到迭代第一印象是包含很多个元素才可以迭代,确实如此。举个更加详细的案例: 需求:: 

你需要产生一个按照特定规则增减的序列,比如最简单的递增序列:1,2,3…1000000,第一印象是可以把产生号的序列放到list中,使用的时候直接取值就好,但是这种做法有个致命的缺点,即需要预先存储这些序列,这会耗费大量的内存,那么有没有更好的方法呢? 

这是yield出来拯救世界了: 

def getSeq(num):

    index = 1;

    while index<num:

       yield index

        index = index+1

 

调用方法: 

for i in getSeq(1000000):

    pass

 

上述代码运行时,for中调用了getSeq,执行该函数时,遇到yield index时会将index的值返回,并且函数暂停在yield语句的位置,下次再调用getSequence时,将继续从上次暂停的位置开始运行,直到遇到yield关键词时又将index的值返回,一直这样循环 

yield的作用也就是:当执行到yield关键词的代码时,函数会暂时返回,下次调用该函数时,会从上次暂停的地方继续运行,yield起到一个暂时返回的作用,有点像return。 

另外,yield其实可以有返回值,也可以从外界改变yield的返回值: 

def getSeq(num):

    index = 1

    while index<num:

        res = yield index

        print('res = '+str(res)+'\n')

        index = index+1

for i in getSeq(3):

    print('i = '+str(i)+'\n')

 

输出: 

 

 i=1 res = None i = 2 res = None 

 

上面打印出的res取值都是None,yield将index的值返回给调用方后,res赋的值为None,但是我们也可以从外界手动给res赋值 

def getSeq(num):

    index = 1

    while index<num:

        res = yield index

        print('res = '+str(res)+'\n')

        index = index+1

seq = getSeq(5)#

next(seq)

seq.send(1)

seq.send(2)

seq.send(3)

 

输出: 

 

 res=1 res=2 res=3 

 

上述代码先调用next(seq)主要是使getSeq函数暂停到yield语句的地方,暂停在yield语句后才能使用send方法给yield返回值赋值,否则会报错。 

上述大概是yield关键词的使用,总结: 

在执行seq = getSeq(5)的时候,函数并没有执行,此时seq的类型是对象,更具体一点seq是生成器类型(generator)每个generator类型对象主要有两个方法:send和next,next用来迭代,send用来给yield返回值赋值,默认情况下yield的返回值是None每一个send方法中隐式调用了next方法send方法是给yield表达式返回值赋值,所以函数必须暂停在yield代码处的时候才能调用send方法(其实就是调用send方法前至少调用一次next方法)for i in getSeq 其实就是对generator进行迭代,和next方法类似 

 

扫描下方二维码,及时获取更多互联网求职面经、java、python、爬虫、大数据等技术,和海量资料分享:公众号后台回复“csdn”即可免费领取【csdn】和【百度文库】下载服务;公众号后台回复“资料”:即可领取5T精品学习资料、java面试考点和java面经总结,以及几十个java、大数据项目,资料很全,你想找的几乎都有

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全新的membership框架Asp.net Identity(1)——.Net membership的历史

在Asp.net上&#xff0c;微软的membershop框架经历了Asp.net membership到Asp.net simple membership&#xff0c;再到现在的Asp.net Identity. 每一次改变&#xff0c;都使得验证框架更加的适应变化和可定制。这篇文章是Asp.net Identity系列的开篇&#xff0c;主要就membersh…

c语言100位整数变量声明_C ++程序动态声明一个整数变量并打印其内存地址

c语言100位整数变量声明Here, we will learn how we can declare an integer variable dynamically and how to print address of declared memory block? 在这里&#xff0c;我们将学习如何动态声明整数变量&#xff0c;以及如何打印声明的内存块的地址&#xff1f; In C pr…

[转载] python 函数返回多个值

参考链接&#xff1a; 在Python中返回多个值 &#xff08;廖雪峰Python教程学习笔记&#xff09; 函数体内部的语句在执行时&#xff0c;一旦执行到return&#xff0c;函数就执行完毕&#xff0c;并将结果返回。 如果没有return语句&#xff0c;函数执行完毕后也会返回结果…

二.编写第一个c#程序(注释,命名空间,类,Main方法,标识符,关键字,输入,输出语句,)...

复习编写一个控制台应用程序&#xff0c;目标是在控制台输出“Hello World” 1.第一步&#xff0c;打开Visual Studio 2012以上版本(我用的是VS 2015)&#xff0c;打开完成后出现以下界面 2.第二步&#xff0c;这时候就要新建一个解决方案了&#xff0c;创建解决方案可以直接点…

[转载] Python中定义函数,循环语句,条件语句

参考链接&#xff1a; Python中的局部函数 由于日常程序流中主要是三种结构&#xff1a;顺序&#xff0c;循环&#xff0c;条件&#xff0c;且往往需要自定义函数再调用&#xff0c; 因此今天想学习一下Python中关于定义函数、循环语句和条件语句的写法。 1.定义函数 区…

node oauth2验证_如何设置和使用护照OAuth Facebook身份验证(第1部分)| Node.js

node oauth2验证In my last articles, we looked at the implementation of the passport-local authentication strategy. We also looked at the various requirements to get started with the login form. 在上一篇文章中&#xff0c;我们介绍了护照本地身份验证策略的实现…

vue2.0 引用qrcode.js实现获取改变二维码的样式

vue代码 <template><div class"qart"><div id"qrcode" ref"qrcode"></div><input type"text" id"getval" value"" placeholder"修改这个值改变二维码"></div> <…

[转载] Python列表排序 list.sort方法和内置函数sorted

参考链接&#xff1a; Python中的函数 Python列表排序 list.sort方法和内置函数sorted 很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表. 这时候就可以使用list.sort方法和内置函数sorted,本文就是介绍list.sort方法和sorted内…

Java Thread类最终同步的void join(long time_in_ms)方法,带有示例

线程类最终同步无效连接(long time_in_ms) (Thread Class final synchronized void join(long time_in_ms)) This method is available in package java.lang.Thread.join(long time_in_ms). 软件包java.lang.Thread.join(long time_in_ms)中提供了此方法。 join(long time_in_…

RYU控制器安装`

2019独角兽企业重金招聘Python工程师标准>>> 同样是参考了http://linton.tw/2014/02/11/note-how-to-set-up-ryu-controller-with-gui-component/的内容。 1. 由于Ubuntu中自带有Python&#xff0c;因此直接开始安装pip apt-get install python-pip apt-get i…

[转载] mac开发者,你不得不知道的环境变更设置方法(如Java的环境变更 source命令 )

参考链接&#xff1a; 设置Java环境 Mac是基于Unix的&#xff0c;所有先来几个常识与命令&#xff1a; Unix中双引号单引号反引号(" )的区别 Unix中双引号起到“弱引用”的作用:被引用的字符大部分被按照字符字面的意思解释执行&#xff0c;除了了$,\,字符除外。 [因…

人形机器人正在美国史密森尼博物馆中担任导游的工作

Te article has been removed, please visit IncludeHelps home page for more articles 该文章已被删除&#xff0c;请访问IncludeHelp的主页以获取更多文章翻译自: https://www.includehelp.com/News/a-humanoid-robot-is-doing-the-job-of-a-guide-in-the-smithsonian-museu…

normalizr API

APInormalizedenormalizeschemaArrayEntityObjectUnionValuesnormalize(data, schema)Normalizes input data per the schema definition provided. 根据提供的schema定义规范化输入数据。data: required Input JSON (or plain JS object) data that needs normalization.schem…

[转载] 【Java】基础06:HelloWorld入门程序

参考链接&#xff1a; 从Hello World示例开始Java编程 HelloWorld它的中文意思是&#xff1a;“你好&#xff0c;世界”。 仿佛代表着计算机对世界说出来的第一句话&#xff0c;因为它简洁实用&#xff0c;所以被作为入门程序广泛使用。 Java程序开发三步骤&#xff1a;编…

[转载] Java中的命名参数

参考链接&#xff1a; Java命名约定 创建具有许多参数的方法是一个主要的缺点。 每当需要创建这样的方法时&#xff0c;就在空气中闻一闻&#xff1a;这是代码的味道。 强化单元测试&#xff0c;然后进行重构。 没有借口&#xff0c;没有屁股。 重构&#xff01; 使用构建器模…

[转载] JVM(一):JVM体系结构详解

参考链接&#xff1a; JVM如何工作–JVM体系结构 JVM简介 JVM是Java程序得以运行的平台&#xff0c;也是Java程序可以跨平台的底层支撑&#xff0c;从整体上来看&#xff0c;JVM的主要功能可以分为加载和执行两大块。其中类加载器负责.class文件的寻址与加载&#xff0…

数据库连接池的设计思路及java实现

2019独角兽企业重金招聘Python工程师标准>>> connectionPool.DBConnectionManager [java] view plain copy package connectionPool; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException; i…

[转载] java虚拟机 jvm 出入java栈 栈空间内存分配

参考链接&#xff1a; Java虚拟机(JVM)堆栈区域 java栈空间是一块线程私有的内存空间&#xff0c;java堆和程序数据密切相关&#xff0c;那么java栈就是和线程执行密切相关。线程最基本的执行行为就是函数的调用。每次函数调用其实是通过java栈传递数据的。 数据结构中的栈的…

SVN命令行更新代码

命令列表 svn help查看帮助信息 Available subcommands: add auth blame (praise, annotate, ann) cat changeli…

[转载] Java中Runtime的使用

参考链接&#xff1a; Java中的JVM的关闭挂钩 1 JDK中Runtime的定义 http://blog.csdn.net/lysnow_oss/archive/2007/05/12/1606349.aspx <转载> 那就首先说点Runtime类吧&#xff0c;他是一个与JVM运行时环境有关的类&#xff0c;这个类是Singleton的。我…