赞
踩
目录
程序的第三大结构是循环结构,在此结构中,通过一个判断语句来循环执行一个代码块,直到判断语句为假时跳出循环。循环语句分为while
循环、for
循环、循环嵌套和迭代器。循环语句中有一个语句break
,通过这个语句可以跳出整个循环。
以下场景便模拟了循环结构与跳出循环的现实场景:
在一个工厂的流水线上每天需要加工零件100
件,且每件零件所做的加工都是一样的,也就是说流水线每天要循环做相同的工作100
次,但是如果在加工时突然停电,则流水线停止对后面所有零件的加工,跳出循环。
While循环与break语句
while
循环+break
结构如下图所示:
while
语句的基本形式为:
- while 判断条件1:
- 循环语句
当判断条件1
为true
时,执行循环语句,直到判断条件1
为假。 例如:
- count = 0
- while(count <= 10):
- print("现在计数为:",count)
- count += 1
break
语句的基本形式为:
- while 判断条件1:
- 循环语句
- 判断条件2:
- break
当判断条件1
为true
时执行循环语句,若此时判断条件2
为true
,执行break
跳出while
循环,若判断条件2
一直为false
,则执行while
循环,一直到判断条件1
为false
。 例如:
- count = 0
- while(count <= 10):
- print("现在计数为:",count)
- count += 1
- if(count > 5):
- break
python
中还为我们提供了一种循环结构:for
循环。for
循环可以遍历序列成员,直到序列中的成员全部都遍历完后才跳出循环。循环语句中有一个continue
语句,这个语句的作用是跳出当前循环。
以下场景便模拟了for
循环结构与跳出当前循环的现实场景:
全班同学的试卷为一个序列,老师在批阅一个班同学的试卷时,需要从第一个同学开始一个一个批阅,然后根据每个同学的具体答卷情况给出最后得分。
如果评阅到某张试卷时发现这位同学缺考,为空白卷,那么就不评阅这张试卷,直接评阅下一张。当全部同学的试卷都评阅完毕时,结束评阅,跳出循环。
for
循环+continue
结构如下图所示:
for
语句的基本形式为:
- for iteration_var in sequence:
- 循环语句
依次遍历序列中的成员,执行循环语句。 例如:
- list = ['python','java','c','c++']
- for book in list:
- print("当前书籍为:",book)
continue
语句的基本形式为:
- for iteration_var in sequence:
- 循环语句
- if 判断语句1:
- continue
当遍历序列时,如果判断语句1
为真,则执行continue
语句,跳出当前循环,直接进入下一次循环。 例如:
- list = ['python','java','c','c++']
- count = 0
- for book in list:
- count += 1
- if count == 3:
- continue
- print("当前书籍为:",book)
在python
中,除了while
循环与for
循环,还有循环嵌套。循环嵌套就是在一个循环体里嵌入另一个循环。
以下场景便模拟了循环嵌套与跳出循环的现实场景: 在一次考试结束后,学校需要统计每位同学的考试总成绩。在这个场景中,我们先将所有同学组成一个序列,然后遍历每位同学,在遍历到每位同学时还要遍历每个同学的每门分数,计算出总成绩,最后得出每位同学的总成绩。
嵌套循环分为for
循环嵌套和while
循环嵌套。
for
循环嵌套的基本形式为:
- for iteration_var in sequence:
- for iteration_var in sequence:
- 循环语句
例如:
- for x in range(1,10):
- for y in range(0,x):
- result = x + y
- print(result)
while
循环嵌套的基本形式为:
- while 判断条件:
- while 判断条件:
- 循环语句
例如:
- x = 1
- y = 0
- while x < 10:
- while y < x:
- result = x + y
- print(result)
- y += 1
- x += 1
- y = 0
迭代器就是用来循环访问一系列元素。迭代器不仅可以迭代序列也可以迭代不是序列但是表现出序列行为的对象。
迭代器的优点
迭代器访问与for
循环访问非常相似,但是也有不同之处。对于支持随机访问的数据结构如元组和列表,迭代器并无优势,因为迭代器在访问的时候会丢失数据索引值,但是如果遇到无法随机访问的数据结构如集合时,迭代器是唯一访问元素的方式。
迭代器仅仅在访问到某个元素时才使用该元素,在这之前,元素可以不存在,所以迭代器很适用于迭代一些无法预先知道元素总数的巨大的集合。
迭代器提供了一个统一的访问集合的接口,定义iter()
方法对象,就可以使用迭代器访问。
可直接作用于for
循环的数据类型如:list
、tuple
、dict
等统称为可迭代对象:Iterable
。可以使用方法isinstance()
判断一个对象是否是可迭代对象。
- from collections import Iterable
- result = isinstance([],Iterable)
- print(result)
- result = isinstance((),Iterable)
- print(result)
- result = isinstance('python',Iterable)
- print(result)
- result = isinstance(213,Iterable)
- print(result)
结果为:
- True
- True
- True
- False
可以被next()
函数调用并不断返回下一个值的对象称为迭代器:Iterator
。
next()
函数访问每一个对象,直到对象访问完毕返回一个StopIteration
异常。
可以使用isinstance()
判断一个对象是否是Iterator
对象。
例如:
- from collections import Iterator
- result = isinstance([],Iterator)
- print(result)
- result = isinstance((),Iterator)
- print(result)
- result = isinstance((x for x in range(10)),Iterator)
- print(result)
结果为:
- False
- False
- True
所有的Iterable
都可以通过iter()
函数转化为Iterator
。
当自己定义迭代器时,需要定义一个类,类里面包含一个iter()
函数,这个函数能够返回一个带next()
方法的对象。
例如:
- class MyIterable:
- def __iter__(self):
- return MyIterator()
- class MyIterator:
- def __init__(self):
- self.num = 0
- def __next__(self):
- self.num += 1
- if self.num >= 10:
- raise StopIteration
- return self.num
迭代器当一次迭代完毕后就结束了,在此调用便会引发StopIteration
异常。如果想要将迭代器保存起来,可以使用复制的方法:copy.deepcopy():x = copy.deepcopy(y)
,不可使用赋值的方法,这样是不起作用的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。