Python快速学习10: 循环的对象及设计 (生活的规律)
前言
系列文章:[传送门]
生活逐渐规律,按时睡觉。今天写博客,明天补时间看会书。慢慢的时间很珍惜 我很喜欢!
时钟就像个循环体,我们将它融入生活。
正文
循环对象的并不是随着Python的诞生就存在的,但它的发展迅速,特别是Python 3x的时代,循环对象正在成为循环的标准形式。
灵活的循环方式
(我晚饭后爱上了萨克斯,因为这是生活的一部分。属于我的特殊循环对象,它的按键就像循环方式,然后出来一首美丽的歌曲)
我的萨克斯偶像
循环对象
循环对象是这样一个对象,它包含有一个next()方法(__next__()方法,在python 3x中), 这个方法的目的是进行到下一个结果,而在结束一系列结果之后,举出StopIteration错误。
对象如此,生活亦如此。我们要自己去看看
假设我们有一个test.txt的文件:
1234
abcd
efg
我们运行一下python命令行:
f = open('test.txt')
print(f.__next__())
...
#不断输入f.next(),直到最后出现StopIteration
对象给你个好的接口哦 你接着
for line in open('test.txt'):
print(line)
构造循环对象-迭代器
从技术上来说,循环对象和for循环调用之间还有一个中间层,就是要将循环对象转换成迭代器(iterator)。这一转换是通过使用iter()函数实现的。但从逻辑层面上,常常可以忽略这一层,所以循环对象和迭代器常常相互指代对方。
构造循环对象-生成器
生成器(generator)的主要目的是构成一个用户自定义的循环对象。
生成器的编写方法和函数定义类似,只是在return的地方改为yield。生成器中可以有多个yield。当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一个yield。生成器自身又构成一个循环器,每次循环使用一个yield返回的值。
下面是一个生成器:
def gen():
a = 100
yield a
a = a*8
yield a
yield 1000
该生成器共有三个yield, 如果用作循环器时,会进行三次循环。
for i in gen():
print i
再考虑如下一个生成器:
def gen():
for i in range(4):
yield i
它又可以写成生成器表达式(Generator Expression):
G = (x for x in range(4))
生成器表达式是生成器的一种简便的编写方式。读者可进一步查阅。
构造循环对象-表推导
表推导(list comprehension)是快速生成表的方法。它的语法简单,很有实用价值。
假设我们生成表L:
L = []
for x in range(10):
L.append(x**2)
以上产生了表L,但实际上有快捷的写法,也就是表推导的方式:
L = [x**2 for x in range(10)]
循环对象小结:
对象就像生活,循环对象就像生活的点滴。循环下去,坚持下去,寻找乐趣就好。自然我们要找到乐趣的方式。
下面寻找乐趣的方式
循环设计
循环乐趣,其实在前面都讲过。哈哈,在此就当作复习吧。
乐趣方式-range()
在Python中,for循环后的in跟随一个序列的话,循环每次使用的序列元素,而不是序列的下标。
之前我们已经使用过range()来控制for循环。现在,我们继续开发range的功能,以实现下标对循环的控制:
S = 'abcdefghijk'
for i in range(0,len(S),2):
print (S[i])
在该例子中,我们利用len()函数和range()函数,用i作为S序列的下标来控制循环。在range函数中,分别定义上限,下限和每次循环的步长。这就和C语言中的for循环相类似了。
乐趣方式-enumerate()
利用enumerate()函数,可以在每次循环中同时得到下标和元素:
S = 'abcdefghijk'
for (index,char) in enumerate(S):
print (index)
print (char)
实际上,enumerate()在每次循环中,返回的是一个包含两个元素的定值表(tuple),两个元素分别赋予index和char
乐趣方式-zip()
如果你多个等长的序列,然后想要每次循环时从各个序列分别取出一个元素,可以利用zip()方便地实现:
ta = [1,2,3]
tb = [9,8,7]
tc = ['a','b','c']
for (a,b,c) in zip(ta,tb,tc):
print(a,b,c)
每次循环时,从各个序列分别从左到右取出一个元素,合并成一个tuple,然后tuple的元素赋予给a,b,c
zip()函数的功能,就是从多个列表中,依次各取出一个元素。每次取出的(来自不同列表的)元素合成一个元组,合并成的元组放入zip()返回的列表中。zip()函数起到了聚合列表的功能。
我们可以分解聚合后的列表,如下:
ta = [1,2,3]
tb = [9,8,7]
# cluster
zipped = zip(ta,tb)
print(zipped)
# decompose
na, nb = zip(*zipped)
print(na, nb)
总结
循环对象
循环设计
(生活离不开寻找对象,寻找方式,你说呢?)
感谢及资源共享
路上走来一步一个脚印,希望大家和我一起。
感谢读者!很喜欢你们给我的支持。如果支持,点个赞。
相关文章
- pycharm安装no interpreter_no python interpreter configured
- 如何为pycharm配置Python解释器_pycharm选择python解释器
- Python基本数据类型-字符型
- python字符串转化列表_Python列表到字符串的转换[通俗易懂]
- aic准则python_Python数据科学:线性回归
- python电脑版微信-微信PC版的API接口 | 可通过Python调用微信功能
- python编程是什么-Python编程
- python多线程多进程脚本
- python中dtype什么意思_NumPy Python中的数据类型对象(dtype)
- python encode和decode函数说明[通俗易懂]
- Python爬取书包网文章实战总结
- python中关于命名的例子_Python 命名规范入门实例「建议收藏」
- Python的基础知识_python的基本知识点
- Python条件语句和循环语句简单使用方法
- Python绘制旭日图_python绘制散点图
- 用 Python 给你一个圣诞帽
- Python 异步: 什么是事件循环 ?(6)
- 软件测试|Python列表的使用,你都会了吗?(一)
- Python小案例(五)循环判断进行分组
- 麒麟服务器V10 版本 安装 Anaconda教程,也就是安装Python环境的教程(亲测有效)
- python如何通过分布式爬虫爬取舆情数据
- 通过 for 循环,比较 Python 与 Ruby 编程思想的差别
- Python Web 深度学习实用指南:第四部分
- Python变量命名规则(超级详细)
- Linux环境下安装Python(linux装python)
- 硬核观察 | Python 之父对 Rust、Go、Julia 和 TypeScript 的看法
- Connecting to MSSQL with Python: A Comprehensive Guide for Beginners(python连接mssql)
- 用Python仿写MSSQL 编程体验更有趣(python仿mssql)
- Python连接MySQL数据库:初学者指南(python入mysql)
- Python与MySQL实现数据分析的完美组合(mysql中python)
- python进阶教程之循环对象
- 跟老齐学Python之有容乃大的list(3)