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

  • 时间:
  • 浏览:1
  • 来源:彩神幸运飞艇_神彩幸运飞艇官方

在介绍yield语法想要,首比较慢向亲戚亲戚朋友说明Python中的迭代(iteration)、可迭代(iterable)、迭代器(iterator)以及生成器(Generator)的概念:

之类亲戚亲戚朋友有有有有一三个名为my_file.txt的文件,后边存储了周董的《告白气球》的歌词,现在亲戚亲戚朋友都要能通过yield语法来构造有有有一三个生成器用于一行一行的读取每一句歌词:

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

《告白气球》的歌词就一行一行的输出到屏幕上了,肯能歌词行数这麼 来太满,想要这边只克隆qq好友好友出前三行给亲戚亲戚朋友演示结果。

这四者之间的关系肯能会稍微想要 混乱,再给亲戚亲戚朋友简单的总结一下:生成器是这个特殊的迭代器,而迭代器又是这个特殊的可迭代对象,可迭代对象想要都要能执行迭代操作也想要都要能通过for循环来遍历的对象。

这段代码中,实际的迭代过程只进行到第10个元素即退出了整个循环,想要在迭代刚始于了了前,依然要计算800万次来生成迭代列表,这就造成了少许的计算和内存资源。而肯能通过生成器重写该迭代过程一句话:

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

迭代器也是这个可迭代对象,与普通的可迭代对象的区别在于,迭代器内控 实现了next函数用来生成每次迭代循环要能返回的元素。而最后的生成器则又是这个特殊的迭代器,具体体现上想要使用yield语法的函数,讲到这里就提到了yield语法,总的来说yield想要用来产生有有有一三个生成器的语法,之类将上述的迭代过程修改为生成器法律法子都要能从前写:

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

想要生成器的法律法子是即用即计算的,即迭代到对应的元素时,想要 元素才相应的计算生成出来,而列表的法律法子要能在迭代刚始于了了前就构建出整个迭代数组,这在想要 情况下都要能极大地节省计算时间。之类下面这段代码:

.在学习所含迷茫不知如何学习的亲戚亲戚朋友小编推荐有有有一三个学Python的学习q u n   227  -435-  480都要能来了解一并进步一并学习!免费分享视频资料

对应的输出结果为:

塞纳河畔 左岸的咖啡

斐波那契数列是一道经典的算法题,也是进程员面试时老是会被问到的一道题。斐波那契数列的想要有有有一三个形如1, 1, 2, 3, 5, 8, ……的数列,从第三项刚始于了了,每一项都等于前两项之和。使用Python来实现有有有一三个计算斐波那契数列的典型函数如下:

6

5

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

2. 为哪几块要使用yield

输出结果符合亲戚亲戚朋友的预期,现在通过yield语法来将亲戚亲戚朋友想要 人DIY的range函数改造成有有有一三个生成器:

迭代是这个对数据的操作,之类针对有有有一三个list逐一获取其中的元素的过程就叫做迭代。而可迭代是对象的这个社会形态,迭代操作必须针对拥有可迭代社会形态的对象进行,常见的可迭代对象包括数组、元组、字典等数据集合,下面代码给亲戚亲戚朋友演示了有有有一三个基本的迭代过程:

3

首先,使用yield语法的生成器最主要的有有有一三个优势想要极其省内存。之类上述有有有一三个迭代过程,同样是遍历输出0-4这几块元素,使用列表的法律法子要能构建出有有有一三个长度为5的数组并存储在内存中,而使用生成器的法律法子只要能有有有一三个index变量即可实现,这还是迭代元素较少的情况下,肯能迭代的是80万甚至800万个元素时,列表的法律法子就要能构建有有有一三个长度为80万肯能800万的数组,这时对于内存的使用想要非常大的负担了,而使用生成器的法律法子,无论是迭代80万还是800万个元素,依然只要能有有有一三个index变量即可实现。

2

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

看到上述有有有一三个迭代过程,亲戚亲戚朋友肯能想要 问題,使用yield改造成生成器法律法子的代码看起来比简单的迭代有有有一三个列表的法律法子要繁杂想要 ,这麼 从前写有哪几块优势呢?

迭代器也是这个可迭代对象,与普通的可迭代对象的区别在于,迭代器内控 实现了next函数用来生成每次迭代循环要能返回的元素。而最后的生成器则又是这个特殊的迭代器,具体体现上想要使用yield语法的函数,讲到这里就提到了yield语法,总的来说yield想要用来产生有有有一三个生成器的语法,之类将上述的迭代过程修改为生成器法律法子都要能从前写:

我手一杯 品尝你的美

这里使用with语法来读取文件,这是Python 3推荐的法律法子。file.readline()函数每次返回一行内容,肯能返回的内容所含每行结尾的换行符,想要通过line.strip(‘ ’)将换行符过滤掉。每次通过yield返回一行内容想要,再次通过file.readline()函数获取下一行内容,直到整个文件被详细迭代。

留下唇印 的嘴

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

生成器在迭代刚始于了了前何必 会计算出所有要能迭代的值,必须用到时才会计算相应的值并返回,想要上述代码的index将只会计算到10即刚始于了了整个迭代过程,补救了计算和内存资源的浪费。

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

让亲戚亲戚朋友来运行测试一下想要 按行读取文件内容的生成器:

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

1

1. 哪几块是yield

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

Python自带的range函数都要能产生有有有一三个可迭代对象,常用于for循环中,在Python 2中range函数生成的是有有有一三个列表,而在Python 3中range函数生成的是有有有一三个生成器。现在让亲戚亲戚朋友来通过yield语法DIY有有有一三个想要 人的range生成器吧!

……

亲戚亲戚朋友首先构造有有有一三个返回给定范围数组的函数:

4

1

想要 函数接受有有有一三个int类型的参数,分别为数组的刚始于了了和刚始于了,每个数之间间隔为1,亲戚亲戚朋友还都要能通过增加有有有一三个参数来指定有有有一三个数之间的间隔,实现函数更高的灵活性:

亲戚亲戚朋友先来运行测试一下想要 range函数:

改造起来也非常简单,首先将定义的用来存储迭代元素的列表删除,想要将从前加进去去元素到列表中的代码改造成yield start即可,从前亲戚亲戚朋友就想要 人DIY了有有有一三个简易的、基于生成器实现的range函数。

让亲戚亲戚朋友来测试运行一下想要 通过yield语法实现的斐波那契数列生成器:

2

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

都要能看到,从第三项刚始于了了的每一项都是前两项的和,从前的输出结果想要亲戚亲戚朋友要的斐波那契数列。