成为Python大牛必须要掌握的高端语法——yield

  • 时间:
  • 浏览:0
  • 来源:大发彩神6合_大发神彩6合官方

这类 函数接受另一3个 int类型的参数,分别为数组的现在现在开始和现在现在开始,每个数之间间隔为1,有人歌词 都有人歌词 都还能这样通过增加另一3个 参数来指定另一3个 数之间的间隔,实现函数更高的灵活性:

4. yield语法示例2:读取文件--《告白气球》

上述代码的输出结果如下:

5

塞纳河畔 左岸的咖啡

迭代是某种对数据的操作,这类针对另一3个 list逐一获取其中的元素的过程就叫做迭代。而可迭代是对象的某种形状,迭代操作这样针对拥有可迭代形状的对象进行,常见的可迭代对象包括数组、元组、字典等数据集合,下面代码给有人歌词 都有人歌词 都演示了另一3个 基本的迭代过程:

首先,使用yield语法的生成器最主要的另一3个 优势假若极其省内存。这类上述另一3个 迭代过程,同样是遍历输出0-4这多少元素,使用列表的方式 时需构建出另一3个 长度为5的数组并存储在内存中,而使用生成器的方式 只时需另一3个 index变量即可实现,这还是迭代元素较少的状态下,机会迭代的是60 万甚至60 0万个元素时,列表的方式 就时需构建另一3个 长度为60 万机会60 0万的数组,这时对于内存的使用假若非常大的负担了,而使用生成器的方式 ,无论是迭代60 万还是60 0万个元素,依然只时需另一3个 index变量即可实现。

在介绍yield语法完后 ,首不能自己向有人歌词 都有人歌词 都说明Python中的迭代(iteration)、可迭代(iterable)、迭代器(iterator)以及生成器(Generator)的概念:

1

3

想要们有人歌词 都来运行测试一下这类 按行读取文件内容的生成器:

上述代码的my_generator()即返回了另一3个 生成器对象,每次循环时执行到yield处即返回当时的index的值,到下一次循环时将从上次返回的yield处继续执行,直到index的值不满足小于5的条件时现在现在开始整个函数,此时也现在现在开始了对这类 生成器的迭代过程。

有人歌词 都有人歌词 都先来运行测试一下这类 range函数:

这里使用with语法来读取文件,这是Python 3推荐的方式 。file.readline()函数每次返回一行内容,机会返回的内容富含每行结尾的换行符,之后 通过line.strip(‘ ’)将换行符过滤掉。每次通过yield返回一行内容完后 ,再次通过file.readline()函数获取下一行内容,直到整个文件被全部迭代。

这类有人歌词 都有人歌词 都有另一3个 名为my_file.txt的文件,上端存储了周董的《告白气球》的歌词,现在有人歌词 都有人歌词 都能这样通过yield语法来构造另一3个 生成器用于一行一行的读取每一句歌词:

2

迭代器也是某种可迭代对象,与普通的可迭代对象的区别在于,迭代器外部实现了next函数用来生成每次迭代循环时需返回的元素。而最后的生成器则又是某种特殊的迭代器,具体体现上假若使用yield语法的函数,讲到这里就提到了yield语法,总的来说yield假若用来产生另一3个 生成器的语法,这类将上述的迭代过程修改为生成器方式 能这样完后 写:

.在学习富含迷茫不知如何学习的有人歌词 都有人歌词 都小编推荐另一3个 学Python的学习q u n   227  -435-  460 能这样来了解同時 进步同時 学习!免费分享视频资料

改造起来也非常简单,首先将定义的用来存储迭代元素的列表删除,之后 将完后 添加元素到列表中的代码改造成yield start即可,完后 有人歌词 都有人歌词 都就买车人DIY了另一3个 简易的、基于生成器实现的range函数。

能这样看过,从第三项现在现在开始的每一项后能 前两项的和,完后 的输出结果假若有人歌词 都有人歌词 都有的斐波那契数列。

本文福利:私信小编【PDF】可获取小编精心下发的电子书一套

看过上述另一3个 迭代过程,有人歌词 都有人歌词 都机会太满难题报告 ,使用yield改造成生成器方式 的代码看起来比简单的迭代另一3个 列表的方式 要错综复杂太满,这样完后 写有哪多少优势呢?

这类 函数通过另一3个 名为fib_list的数组存储生成的前n个斐波那契数,最后一次性返回整个数组。其中a, b = b, a + b是Python的另一3个 特色用法,用于快速交换另一3个 数,离米 :

有人歌词 都有人歌词 都首先构造另一3个 返回给定范围数组的函数:

生成器在迭代现在现在开始前何必 会计算出所有时需迭代的值,这样用到时才会计算相应的值并返回,之后 上述代码的index将只会计算到10即现在现在开始了整个迭代过程,处里了计算和内存资源的浪费。

……

之后 生成器的方式 是即用即计算的,即迭代到对应的元素时,这类 元素才相应的计算生成出来,而列表的方式 时需在迭代现在现在开始前就构建出整个迭代数组,这在太满状态下能这样极大地节省计算时间。这类下面这段代码:

对应的输出结果为:

2

生成器除了能这样用于计算生成数字元素外,在IO读取方面并能起到很大作用,这类在读取另一3个 超大文件,机会查询某个返回结果超多的数据库时,使用通过yield语法构造的生成器来完成读取操作能这样很大程度上降低系统进程池池对于内存的占用。

6

1

上述代码的输出结果如下:

5. yield语法示例3:斐波那契数列

2. 为哪多少要使用yield

斐波那契数列是一道经典的算法题,也是系统进程池池员面试时总爱会被问到的一道题。斐波那契数列的假若另一3个 形如1, 1, 2, 3, 5, 8, ……的数列,从第三项现在现在开始,每一项都等于前两项之和。使用Python来实现另一3个 计算斐波那契数列的典型函数如下:

这段代码中,实际的迭代过程只进行到第10个元素即退出了整个循环,之后 在迭代现在现在开始前,依然要计算60 0万次来生成迭代列表,这就造成了少量的计算和内存资源。而机会通过生成器重写该迭代过程励志的话 :

这四者之间的关系机会会稍微太满混乱,再给有人歌词 都有人歌词 都简单的总结一下:生成器是某种特殊的迭代器,而迭代器又是某种特殊的可迭代对象,可迭代对象假若能这样执行迭代操作也假若能这样通过for循环来遍历的对象。

留下唇印 的嘴

输出结果符合有人歌词 都有人歌词 都的预期,现在通过yield语法来将有人歌词 都有人歌词 都买车人DIY的range函数改造成另一3个 生成器:

迭代器也是某种可迭代对象,与普通的可迭代对象的区别在于,迭代器外部实现了next函数用来生成每次迭代循环时需返回的元素。而最后的生成器则又是某种特殊的迭代器,具体体现上假若使用yield语法的函数,讲到这里就提到了yield语法,总的来说yield假若用来产生另一3个 生成器的语法,这类将上述的迭代过程修改为生成器方式 能这样完后 写:

Python自带的range函数能这样产生另一3个 可迭代对象,常用于for循环中,在Python 2中range函数生成的是另一3个 列表,而在Python 3中range函数生成的是另一3个 生成器。现在想要们有人歌词 都来通过yield语法DIY另一3个 买车人的range生成器吧!

《告白气球》的歌词就一行一行的输出到屏幕上了,机会歌词行数太满,之后 这边只qq克隆好友 出前三行给有人歌词 都有人歌词 都演示结果。

1. 哪多少是yield

我手一杯 品尝你的美

想要们有人歌词 都来测试运行一下这类 通过yield语法实现的斐波那契数列生成器:

参考完后 DIY的range函数的写法,将这类 计算斐波那契数列的函数通过yield语法修改为生成器:

4

3. yield语法示例1:DIY另一3个 range函数