目录
- 昨日内容
- 闭包函数
- 装饰器
- 二层装饰器
- 装饰器模板
- 三层装饰器
- 今日内容
- 迭代器
- 可迭代对象
- 迭代器对象
- for循环原理(迭代循环)
- 三元表达式
- 列表推导式
- 字典生成式
- 生成器
- yield关键字
- yield的三个特性
- 递归
- 迭代器
昨日内容
闭包函数
把函数和变量包到另一个函数里面
装饰器
- 本质是函数,给函数添加功能
- 不改变被装饰函数的源代码
- 不改变被装饰函数的调用方法
二层装饰器
装饰器模板
def deco(func):
def wrapper(*args,**kwargs):
# 要添加的功能
res = func(*args,**kwargs)
return res
return wrapper
@deco # index = deco(index)
def index():
pass
三层装饰器
给二层装饰器传参
今日内容
迭代器
可迭代对象
含有__iter__
方法就叫做可迭代对象
除了数字类型,所有数据类型都是很可迭代对象
迭代器对象
含有__iter__
和__next__
方法的就是迭代器对象
只有文件是迭代器气对象
提供了不依赖索引取值的手段(迭代器的作用)
for循环原理(迭代循环)
dic = {'a':1,'b':2,'c':3}
dic_iter = dic.__iter__()
while True:
try:
print(dic_iter.__next__())
except StopIteration as e:
break
三元表达式
print(x)if x > y else print(y)
三元表达式只支持双分支结构
列表推导式
lt = [i**2 for i in range(4)] # 0,2,4,9
lt = [i**2 for i in [1,2,3,4]]
字典生成式
dic = {'a':1, 'b':2}
dic1 = {i for i in dic} # {'a','b'}
dic2 = {k*2:v**2 for k,v in dic.items()} # {'aa':2, 'bb':4}
z = zip([1,2,3,4],[1,2,3,4])
dic = {k**2:v**2 for k,v in z} # {1:1,2:2,3:3,4:4}
字典表达式一般与zip(拉链函数)列表里面包了元组连用
生成器
含有yield关键字的函数叫做生成器
def f():
yield
# 生成器本质是迭代器
yield关键字
yield的三个特性
- yield会暂停函数,当运行下一次next时才会继续运行下面的代码
- 通过next取值
return的特性
- 终止函数
- 通过调用函数拿到值
递归
函数f内部直接或间接调用函数a本身
def f(): # 死递归
a = 1
f()
f()
每一次递归不会结束函数,并且每一次递归都会开辟新内存空间
真正的递归必须要有退出条件
count = 0
def a():
global count
count += 1
print(count)
if count == 100:
return
a()
a()