for 循环
在上一讲中我们学习了 while 语句进行循环控制,接下来我们将要学习另一种循环语句 for 。
基本使用 ¶
不同编程语言都有 for 语言,比如 C# 语言中的 foreach, Java 语言中的 for,在 Python 中的基本使用方法如下。
for item in sequence:
expressions
sequence
为可迭代的对象,item
为序列中的每个对象。
实例 ¶
example_list = [1,2,3,4,5,6,7,12,543,876,12,3,2,5]
for i in example_list:
print(i)
输出的结果为 1,2,3,4,5,6,7,12,543,876,12,3,2,5
, 内容依次为 example_list
中的每一个元素
注意 Python 是使用缩进表示程序的结构,如果程序这样编写,
example_list = [1,2,3,4,5,6,7,12,543,876,12,3,2,5]
for i in example_list:
print(i)
print('inner of for')
print('outer of for')
那么每次循环都会输出 inner of for
,在循环结束后,输出 outer of for
一次。
进阶 ¶
range使用
在 Python 内置了工厂函数,range
函数将会返回一个序列,总共有三种使用方法
1 range(start, stop)
其中 start
将会是序列的起始值,stop
为结束值,但是不包括该值,类似
数学中的表达 [start, stop)
,左边为闭区间,右边为开区间。
for i in range(1, 10):
print(i)
上述表达将会返回 1-9
所有整数,但不包含 10
2 range(stop)
如果省略了 start
那么将从 0 开始,相当于 range(0, stop)
3 range(start, stop, step)
step
代表的为步长,即相隔的两个值得差值。从 start
开始,依次增加
step
的值,直至等于或者大于 stop
for i in range(0,13, 5):
print(i)
将会输出 0, 5, 10
。
高级主题 ¶
4.1 内置集合
Python 共内置了 list
、 tuple
、dict
和 set
四种基本集合,每个
集合对象都能够迭代。
tuple 类型
tup = ('python', 2.7, 64)
for i in tup:
print(i)
程序将以此按行输出 ‘python’, 2.7 和 64。
dictionary 类型
dic = {}
dic['lan'] = 'python'
dic['version'] = 2.7
dic['platform'] = 64
for key in dic:
print(key, dic[key])
输出的结果为:platform 64,lan python, version 2.7
, 字典在迭代的过程
中将 key
作为可迭代的对象返回。注意字典中 key
是乱序的,也就是说和插入
的顺序是不一致的。如果想要使用顺序一致的字典,请使用 collections
模块
中的 OrderedDict
对象。
set 类型
s = set(['python', 'python2', 'python3','python'])
for item in s:
print(item)
将会输出 python, python3, python2
set 集合将会去除重复项,注意输出的
结果也不是按照输入的顺序。
4.2 迭代器
Python 中的 for
句法实际上实现了设计模式中的迭代器模式
,所以我们自己也可以按照迭代器的要求自己生成迭代器对象,以便在 for
语句中使用。
只要类中实现了 __iter__
和 next
函数,那么对象就可以在 for
语句中使用。
现在创建 Fibonacci 迭代器对象,
# define a Fib class
class Fib(object):
def __init__(self, max):
self.max = max
self.n, self.a, self.b = 0, 0, 1
def __iter__(self):
return self
def __next__(self):
if self.n < self.max:
r = self.b
self.a, self.b = self.b, self.a + self.b
self.n = self.n + 1
return r
raise StopIteration()
# using Fib object
for i in Fib(5):
print(i)
将会输出前 5 个 Fibonacci 数据 1,1, 2, 3, 5
4.3 生成器
除了使用迭代器以外,Python 使用 yield
关键字也能实现类似迭代的效果,yield
语句每次
执行时,立即返回结果给上层调用者,而当前的状态仍然保留,以便迭代器下一次循环调用。这样做的
好处是在于节约硬件资源,在需要的时候才会执行,并且每次只执行一次。
def fib(max):
a, b = 0, 1
while max:
r = b
a, b = b, a+b
max -= 1
yield r
# using generator
for i in fib(5):
print(i)
将会输出前 5 个 Fibonacci 数据 1,1, 2, 3, 5
分享到:
如果你觉得这篇文章或视频对你的学习很有帮助, 请你也分享它, 让它能再次帮助到更多的需要学习的人.
莫烦没有正式的经济来源, 如果你也想支持 莫烦Python 并看到更好的教学内容, 赞助他一点点, 作为鼓励他继续开源的动力.