内容正文:
第10章函数的高级特性
>迭代器和生成器>
实战15:答题闯关挑战
匿名函数
>装饰器
>内置高阶函数
>实战16:验证用户登录信息
学习目标
LEARNING OBJECTIVES
了解迭代器和生成器的用法
掌握匿名函数的用法
理解高阶函数的概念
掌握常用的高阶函数
掌握装饰器的概念和使用
初心至善匠心育人
10.1
迭代器和生成器
迭代器规则
+创建迭代器
Contents创建生成器
生成器表达式
10.1迭代器和生成器
10.1.1迭代器规则
for循环可以对可迭代对象进行迭代,其中可迭代对像是指具有itrO方法的对像。而
迭代器对像不仅拥有iter0方法,还具有next0方法,当调用next(0方法时,迭代
器会返回它的下一个值。当迭代器没有值可以返回时,就会抛出Stoplteration.异常。
可以用迭代器对象理解fo循环的运行原理:
>for循环调用in后对象的terO方法,将可迭代对像转换为迭代器对像
调用迭代器对像的next方法,将得到的返回值赋给i前面的变量,再执行循环体
中的代码:
>循环往复,直到取完送代器中的值,自动埔捉Stoplteration.异常结束循环。
初心至善匠心育人
10.1迭代器和生成器
10.1.1迭代器规则
for循环遍历列表
对for循环过
程进行分解
1.
ist01=[1,234]
2
iterator list01.iter()
#将可迭代对象转化为迭代器对象
1.ist01=[1,23,4]
3
while True:
4.
try:
2.for item in list01:
5.
item=iterator..next0#不断获取迭代器对敏的下一个值
3.
print(item,end="")
6.
print(item,end ='
#打印值
7.
except Stoplteration:
#当从迭代器对象中取不到值时,捕获到
Stoplteration异带,结束环
Break
列表可以存放多个数据,通过索
1234
1234
引也能获取到每个值,那为什么还要有
送代器呢?送代器规则的关键是什么呢
初心至善匠心育人
10.1迭代器和生成器
10.1.2创建迭代器
1.class Vector.
2.
def init(self,start,end):
3.
self.start start
4.
self.endend
如果数据过多,将所有数据存
5.
def iter(self):
运行结果如下:
入列表中,会占用大量内存。然而
6.
return self
#返回对象本身
3456789
迭送代器能韵够使用一个值时才去获取
7.
def next (self):
8.
if self.start <self.end:
一个值,不像列表一次性获取所
9.
number self.start
有的值,节约内存,更简单优雅。
10.
self.start +=1
11.
retum number
#返回迭代器对像下一个的值
12.
else:
13.
raise Stoplteration
#当迭代器中的值取完后,抛出异常
14.v1 Vector(3,9)
15.for item in v1:
16.
print(item,end =*"
初心至善匠心育人
10.1迭代器和生成器
10.1.3创建生成器
在Pythont中,函数中使用了yield语句即为生成器函数。当一个
生成器函数被调用时,它返回一个称为生成器的迭代器,该生成器控制
生成器函数的执行。生成器是特殊的迭代器,不过,生成器的语法
要比以上讲解的迭代器简洁。
初心至善匠心育人
10.1迭代器和生成器
10.1.3创建生成器
生成器获得列表
中所有的偶数
1.ist01=[2,3,19,34,12]
2.def generator(alist):
#定义生成器函数
3.
for item in alist:
4.
if item %2==0:
5.
yield item
6.g01=generator(list01)
#调用生成器函数
7.for item in g01:
#遍历生成器
8.
print(item,end="")
23412
初心至善匠心育人
10.1迭代器和生成器
10.1.3创建生成器
生成器产生连续
1.class Vector:
数字
2
def init (self,start,end):
3.
self.start start
4
self.endend
5.
def get_num(self):
6.
while True:
7.
if self.start self.end:
8.
break
3456789
9.
number self.start
10.
self.