初学者python笔记(迭代器、生成器、三元表达式、列表解析)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了初学者python笔记(迭代器、生成器、三元表达式、列表解析),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3192字,纯文字阅读大概需要5分钟。
内容图文
可迭代对象是我们非常熟悉的一个名词,之前也简单介绍过能被for循环的,就是可迭代对象,但其实,里面的水更深。
迭代器与for循环的关系
-
迭代器协议:
对象必须体统一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个StopIteration异常,以终止迭代(只能往后走,不能往前退) -
可迭代对象:
实现了迭代器协议的对象 -
for循环的本质:
先将对象变为可迭代对象,再循环所有对象,全都是使用迭代器协议,一次一次得调用协议中的next方法
注意:
字符串、列表、元组、字典、集合、文件对象都不是可迭代对象,它们根本不存在next方法,只不过在for循环时,调用了它们内部的__iter__方法,把它们变成了可迭代对象 -
强大的for循环机制:
基于迭代器协议提供一个统一的可以遍历所有对象的方法,不管是有序的列表、字符串、元组,还是无序的集合、字典、文件,都可以通过for循环来遍历 -
迭代器如何工作的:
x = 'world'
iter_test=x.__iter__() #用__iter__将x字符串变为可迭代对象
print(iter_test) #这样会打印出该可迭代对象的编码
#成为可迭代对象后,就有了可迭代对象专有的next方法,就可以一步一步操作
print(iter_test.__next__())
print(iter_test.__next__())
print(iter_test.__next__())
print(iter_test.__next__())
print(iter_test.__next__())
运行结果:
w
o
r
l
d
将字符串中的字符一个一个全部输出了
- while循环模拟for循环与迭代器的结合:
x = 'world'
iter_x = x.__iter__() #将字符串变成可迭代对象
while True: #循环遍历可迭代对象
try:
print(iter_x.__next__()) #输出每次遍历的结果
except StopIteration: #如果出现StopIteration,就终止
print('迭代完毕了,循环终止了')
break
运行结果:
w
o
r
l
d
迭代完毕了,循环终止了
- 用内置函数next()取值可迭代对象:
x = ['may','you','be','happy']
iter_x=x.__iter__() #用__iter__将x字符串变为可迭代对象
#用内置函数next()取值可迭代对象
print(next(iter_x))
print(next(iter_x))
print(next(iter_x))
print(next(iter_x))
运行结果:
may
you
be
happy
生成器
-
通过以上的分析就可以看出,遵循迭代器协议的对象就是可迭代对象,这个可迭代对象就是迭代器
-
生成器: 自动实现可迭代协议的一种数据类型,这类数据默认已经iter过了,因此默认存在__next__方法
-
生成器函数:
函数的返回值用yield而不是用return,这样返回的数据就是一个生成器,默认的可迭代对象,拥有__next__方法
def test():
yield 'ok'
res = test()
print(res)
print(next(res))
三元表达式
name = '乌索普'
res = '骗子' if name == '乌索普' else '勇敢的海上战士'
#三元表达式,将if为True要执行的 表达放在if前面,if后接else
#这里的意思:如果name变量值为'乌索普',就将'骗子'赋值给res,
#否则赋值成'勇敢的海上战士'
print(res)
运行结果:
骗子
列表解析与生成器表达式
- 普通赋值:
egg = []
for i in range(10):
egg.append('鸡蛋%s'%i)
print(egg)
运行结果:
[‘鸡蛋0’, ‘鸡蛋1’, ‘鸡蛋2’, ‘鸡蛋3’, ‘鸡蛋4’, ‘鸡蛋5’, ‘鸡蛋6’, ‘鸡蛋7’, ‘鸡蛋8’, ‘鸡蛋9’]
- 列表解析(快速赋值):
egg = []
egg = ['鸡蛋%s'%i for i in range(10)]
print(egg)
甚至可以这样:
egg = []
egg = ['鸡蛋%s'%i for i in range(10) if i>=5] #一个三元表达式
print(egg)
但是要注意。不存在四元表达式,所有不能:
egg = ['鸡蛋%s'%i for i in range(10) if i>=5 else i]
- 生成器表达式:
chicken = ('鸡%s' %i for i in range(10)) #制作一个生成器
print(chicken) #输出生成器,会显示它是一个可迭代对象
print(chicken.__next__()) #用__next__方法一个一个输出可迭代对象
print(chicken.__next__())
print(next(chicken))
print(next(chicken))
运行结果:
鸡0
鸡1
鸡2
鸡3
Ps:列表解析与生成器表达式都是一种便利的编程方式,不过生成器表达式更节省内存,因为它是基于迭代器协议一个一个取值的
内容总结
以上是互联网集市为您收集整理的初学者python笔记(迭代器、生成器、三元表达式、列表解析)全部内容,希望文章能够帮你解决初学者python笔记(迭代器、生成器、三元表达式、列表解析)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。