上节课回顾
闭包函数
把变量x和函数a包在闭包函数b中,然后返回函数a+变量x
装饰器
- 本质就是一个函数,用来给另外一个函数添加功能
- 不修改被装饰函数的源代码
- 不修改被装饰函数的调用方式
装饰器模板
二层装饰器
三层装饰器
给二层装饰器传参
今日所学
迭代器
for循环就是应用了迭代器原理 , 可迭代对象不一定低迭代器 , 但是迭代器一定是可迭代对象
可迭代对象
具有__iter__
方法的 就是可迭代对象
基本的数据类型 , 除数字类型和布尔类型外 , 都是可迭代对象
__iter__
方法可以使可迭代对象变成迭代器
迭代器
同时具有__iter__
和__next__
方法的 就是迭代器
只有文件对象是迭代器
迭代器特点:
- 内置
__next__
方法,执行该方法会拿到迭代器对象中的一个值 - 内置有
__iter__
方法,执行该方法会拿到迭代器本身 - 文件本身就是迭代器对象。
缺点:
- 取值麻烦,只能一个一个取,并且只能往后取,值取了就没了
- 无法使用len()方法获取长度
三元表达式
条件成立时的返回值 if 条件 else 条件不成立时的返回值
x = 10
y = 20
# 正常操作
if x > y:
print(x)
else:
print(y)
# 只能用于单分支结构
print(x) if x > y else print(y)
列表推导式
lt = []
# 正常操作
for i in range(10):
lt.append(i**2)
print(lt)
# 简化版的 列表推导式
lt = [i ** 2 for i in range(10)]
字典生成式
print({i: i**2 for i in range(10)})
zip()方法
通过解压缩函数生成一个字典
生成器
generator,本质就是迭代器,生成器是一个自定义的迭代器
生成器:含有yield关键字的函数叫做生成器
def ge():
yield 3 #一个yield相当于一个next;可以暂停函数
yield 4
递归
函数a内部直接调用函数a本身
每一次递归,不会结束函数,并且每一次递归都会开辟内存空间,但如果一直开辟那就炸了,所以最多递归1000次
真正的递归必须得要有退出条件
#递归
def a():
global count
count += 1
print(count)
if count == 5:
return
a()
a()