程序的第三大结构是循环结构。在此结构中,通过一个判断语句来循环执行一个代码块,直到判断语句为假时跳出循环。 循环语句分为while循环、for循环、循环嵌套和迭代器。 循环语句中有一个语句break,通过这个语句可以跳出整个循环。
1.while循环与break语句
while循环和break的结构如下图1所示:
1.while语句
while语句的基本形式为:
while 判断条件1:
循环语句
当判断条件1为true时,执行循环语句,直到判断条件1为假。例如:
count = 0
while(count <= 10):
print("现在计数为:",count)
count += 1
2.break语句
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
2.for循环和continue语句
Python 中还为我们提供了一种循环结构:for循环。 for循环可以遍历序列成员,直到序列中的成员全部都遍历完后才跳出循环。循环语句中有一个continue语句,这个语句的作用是跳出当前循环。 for循环和continue结构如下图所示:
1.for语句
for语句的基本形式为:
for iteration_var in sequence:
循环语句
依次遍历序列中的成员,执行循环语句。例如:
list = ['python','java','c','c++']
for book in list:
print("当前书籍为:",book)
2.continue语句
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)
3.循环嵌套
在Python 中,除了while循环与for循环,还有循环嵌套。循环嵌套就是在一个循环体里嵌入另一个循环。 循环嵌套分为for循环嵌套和while循环嵌套。
1.for循环嵌套
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)
2.while循环嵌套
while循环嵌套的基本形式为:
while 判断条件:
while 判断条件:
循环语句
例如:
x = 1
y = 0
while x < 10:
while y < x:
result = x + y
print(result)
y += 1
x += 1
y = 0
4.迭代器
迭代器用来循环访问一系列元素,它不仅可以迭代序列,也可以迭代不是序列但是表现出序列行为的对象。
1.迭代器的优点
迭代器访问与for循环访问非常相似,但是也有不同之处。对于支持随机访问的数据结构如元组和列表,迭代器并无优势。因为迭代器在访问的时候会丢失数据索引值,但是如果遇到无法随机访问的数据结构如集合时,迭代器是唯一访问元素的方式; 迭代器仅仅在访问到某个元素时才使用该元素。在这之前,元素可以不存在,所以迭代器很适用于迭代一些无法预先知道元素总数的巨大的集合; 迭代器提供了一个统一的访问集合的接口,定义iter()方法对象,就可以使用迭代器访问。
2.理解迭代器
可直接作用于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。
3.定义迭代器
当自己定义迭代器时,需要定义一个类。类里面包含一个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
4.复制迭代器
迭代器当一次迭代完毕后就结束了,在此调用便会引发StopIteration异常。如果想要将迭代器保存起来,可以使用复制的方法:copy.deepcopy():x = copy.deepcopy(y),不可使用赋值的方法,这样是不起作用的。
|