传智郑州大学校园Python学习的迭代器和生成器 发布时间:2020-03-26
一、传智播客Python学习:文件操作的“B模式”(补充)
rb、wb和ab等模式以字节形式运行。应注意以下问题:
1)文件不能保存在内存中,只能保存在硬盘中。在二进制形式中,Python只能将字符串写入文本文件。要将数字数据存储在文本文件中,必须首先使用函数str()将其转换为字符串格式。
2)使用rb.rw编码打开文件时,不能定义编码类型,即不能在open()函数中指定编码。添加一些文件操作方法,如下所示:
复制代码
with open(& quot;尼古拉斯·赵四”wb)asf:
f编码()#打开文件编码。encoding= " "定义输出的编码方法和编码方法,与源文件的编码方法无关
#如果您不知道源代码,您可以定义与大多数代码兼容的编码。
#刷新()#刷新。此方法可使修改文件时的更改生效(pycharm不需要此方法,因为pycharm内部机制将自动保存)
# f tell () #打印光标的位置,光标移动以字节为单位,read()以字符为单位,中文3字节,英文1字节
# with open(& quot;尼古拉斯·赵四”w quot;,编码= & quotutf-8,换行符= & quot")asf:读取源文件中真正的换行符。
通过readlines方法读取文件,输出时不使用换行符= ' ',加上yes \ r \n
# f seek (0) #指定光标位置为0
#f.seek(10,0)#后面是默认位置,即光标位置从0开始,并在B模式下运行,因为seek以字节为单位移动光标。
由# f seek (10,1) # 1表示的相对位置
# f搜索(3,1) #根据10移动光标
# f seek (-5,2) # 2代表反向顺序指定光标位置
#f.truncate(10)#从开始到10(光标位置)不在w\w+模式下
复制代码
第二,传智播客Python学习:文件路径
如果程序文件存储在当前路径下,那么通过打开(& quot文件名”但是,如果程序文件存储在当前文件的另一个路径或子目录中,则必须提供文件路径,这允许Python在系统中的特定位置找到它。
相对路径
如果在当前路径下有一个文件,在文件文件下有一个“尼古拉斯·赵四”程序文件,如果我想打开这个文件,我需要使用相对文件路径来打开它。
with open(& quot;文件\尼古拉斯·赵四",编码= & quotutf-8)asf:
打印(f.readlines())
这段代码让Python打开文件夹文件下的文件“尼古拉斯·赵四”。在Windows系统中,文件路径使用反斜杠(\)而不是斜杠(/)
绝对路径
文件在计算机中的确切位置可以告诉Python,这样就不必关心当前运行的程序存储在哪里。这被称为绝对路径。当相对路径不起作用时,可以使用绝对路径。绝对路径通常比相对路径长,类似于在Linux系统中。这在视窗系统中是相似的
通过使用绝对路径,可以读取系统中任何位置的文件。
第三,传智播客Python学习:迭代器
迭代器和递归函数的区别:递归函数反复调用自己,并且必须有一个确定的条件。此外,对于每个更深的循环,规模必须比以前更小。迭代器,每个循环都取决于之前的结果。
迭代器协议:对象必须提供一个_next_()方法,该方法的执行要么返回到迭代中的下一项,要么导致StopIteration异常(只能向后但不能向前)。
迭代对象:实现迭代协议的对象(如何实现?在对象内部定义了一个iter()方法。
协议是一种协议。迭代对象实现迭代器协议。python的内部工具(例如循环、求和、最小值、最大值函数等)。)使用迭代器协议访问对象。
以for循环为例:for循环遵循迭代器协议来循环实际上不是迭代对象的所有对象(列表、字典、字符串、元组、集合),但是当for循环时,它调用它们的内部_iter_ method,将它们变成迭代对象,然后for循环调用迭代对象,然后它可以调用_ next _ method,直到异常结束。代码解释如下:
name=foriinname:l=name。_ _ ITER _ _()print(l . _ _ next _ _())print(I)
当for循环列表时,它实际上是在调用列表的内置方法_iter_(),将列表转换为迭代对象,并且在将列表转换为迭代对象之后,列表具有_next_()方法,在调用此方法时会逐个读取该方法。
还有一个next()方法,其本质是调用_next_()函数。
可以被next()函数调用并返回下一个值的对象是迭代器:迭代器、列表、字典。尽管这些基本数据类型是迭代对象,但它们不是迭代器。它们可以通过迭代器()方法变成迭代器。
名称=
打印(类型(名称。__iter__())通过_iter_方法将可迭代对象更改为迭代器
运行结果:
<。类别& # 39;list _ iterator & # 39>;
四、传智播客Python学习:列表生成和三元运算
如果当前的需求是输出从1到9的数字,当然大多数人会首先想到for循环,如下所示:
复制代码
名称=
复制代码
如果写在一行中,则如下所示:
打印(
什么是三元运算?
名称= & quot尼古拉斯·赵四”
打印街舞。尼古拉斯·赵四“其他没有街舞)一元:“会跳街舞”二元:从“不会跳街舞”看三元
输出结果:
会跳街舞吗
事实上,很好地理解,if可以被解释为在其他之前被判断为真的返回结果,并且在其他之后是被判断为假的返回结果,这是三元运算。
三元运算也可以与列表生成公式结合使用。要求:输出数在10以内大于5
打印(
但是请注意,在这个声明中,你不能在家里其他地方,你必须注意三元,加上其他变成四元,程序将报告一个错误。
五、传智播客巨蟒学习:生成器
在Python中,循环计算的机制称为生成器。生成器可以理解为一种数据类型。该数据类型自动实现迭代器协议(其他数据类型调用它们自己的内置方法_iter_ method),因此生成器是一个迭代对象,可以直接使用_next_方法。
生成器分类在python中的表现(python有两种不同的方式来提供生成器)
1.生成器表达式,生成器实际上是列表生成器的[]转化成()。也就是上面的列表生成器,如果我想把它变成一个生成器:
打印(类型(( 10)ifi>。5))
运行结果:
<。类别& # 39;发电机& # 39;>;
生成器保存算法。每次调用next()时,都会计算下一个元素的值。直到计算出最后一个元素,并且没有其他元素,才会引发停止迭代错误。
复制代码
a =(10)ifi >;5)
打印(a.__next__)
Print(next(a))一次执行一次next()操作,只读取一个值
打印(下一页(a))
运行结果:
<。方法包装& # 39;__下一个_ _ & # 39;ofgeneratorobjectatt0x 000001620 ECD 7888 & gt。
6
7
复制代码
如果这个生成器有n个以上的值呢?显然,一直使用next()是不方便的,所以通常使用for循环。
2.函数生成公式
定义函数时,只需将return()更改为yield(),yield()会保存上次读取值的位置,当再次调用它时,将从该位置调用它。普通函数遇到return语句或函数语句的最后一行时返回。每次调用next()时,成为生成器的函数都会执行,当yield语句返回时,它将从上次返回的yield语句继续执行。
复制代码
deffunc():
产量1
产量2
res=func()
打印(res.__next__())
运行结果:
1
复制代码
执行_next_()方法一次,输出1。程序停留在这个位置。当_next_()方法再次被执行时,它将从位置1和输出2开始。这是函数生成公式。在执行_next_()来读取完整的元素之后,再次执行该程序将会抛出一个StopIteration异常,处理该异常的方法将在下面的文章中详细描述。
这篇文章是由网站管理员的用户提交的。未经网站管理员同意,严禁复制。例如,如果大多数用户在稿件中发现虚假报告,欢迎读者反馈、纠正和报告问题(反馈入口)。
免责声明:本文是对用户的贡献。站长之家发布这篇文章只是为了传达信息。这并不意味着站长之家同意其观点,不对内容的真实性负责,仅供用户参考,不构成任何投资或使用建议。读者被要求核实真实性和可能的风险,任何后果将由读者自己承担。
相关文章推荐
- 山东省为湖北省防疫和控制捐赠了10亿
- 金被发现在音乐会上作弊,并一度假装
- 刘备见人时说他是钟的。刘备和刘胜是
- 揭示雍正帝的特殊爱好,喜欢给大臣们
- 钟一生中从未打过一次著名的战役。为
- 当海印的财富管理公司计划裁员三分之
- 200,000名股东激动不已!从下限到上
- 苏宁瑞城启动230万美元基准科技城建
- 中国在意大利的防疫:从误解到赞美
- 2020年,空调品牌承受不起损失
- 龙脊股份(601012。上海:控股股东李春
- 不到两周,情节就会逆转!美国拒绝接
- 谁比NBA总决赛冠军更强?乔丹8-4,科
- 买车后,这10样东西一定在你的车里。
- 独立教练:我非常希望把阿奎罗和卢卡
- 李:西班牙体力和驾照都在手。我的家
- 七年前的今天,热火失去了詹伟,波什
- 前意大利小姐在科斯塔库塔吐口水:和
- [晨谈]是时候展示你的大脑了!让我们
- 4月1日河北疫情最新消息:2例新输入病
- 如果没有奔驰和宝马,BAIC华晨的“空
- 通用汽车下周交付首批20,000个口罩
- 穆尼:我的目标是在巴黎疫情期间和我
- 赖斯身体:巴洛特利失去了俱乐部和球
- 谢晖:从助理教练到教练是很自然的。
- 巴拉圭前锋的近1000件球衣被盗!包括
- 博腾事故:无人员伤亡,财产损失约25
- "显然我应该战术性地为梅西服务!"
- 怡保体育用爱心赞助波尔多,携手展示
- 马德里竞技主席:现在讨论军事问题没
- 美国新增确诊病例累计超过170,000例
- ANSA:孔蒂和国际球员都愿意减薪,目

