进阶学习6-装饰器/迭代器/生成器
2020-01-30 本文已影响0人
龙猫六六
总结
描述 | 备注 | |
---|---|---|
函数核心概念1 | 函数可以赋值给变量 | |
函数核心概念2 | 函数可以作为参数传递 | |
函数核心概念3 | 嵌套函数 | |
函数核心概念4 | 函数可作为返回值 | |
装饰器 | 不改变原函数前提下,包装函数 | 将修饰的原函数作为嵌套函数 |
迭代器 | 有限[i for i in range(10)] | 调用next获取下一个元素 |
生成器 | 无限(i for i in range(10)) | 特殊的迭代器 |
装饰器
装饰器的作用:在不改变原函数的前提下,对函数进行修改。即嵌套函数的
函数的4大特点
- 函数可以作为对象赋值给变量
- 函数可以作为参数进行传递
- 嵌套函数,函数内定义函数
- 函数可作为返回值,闭包
实例1
# func = func1,函数赋值给变量
def my_decorator(func):
# func函数作为参数进行传递
print('my_decorator')
# 嵌套函数
def wrapper(*args, **kwargs):
print('wrapper')
func(*args, **kwargs)
#函数作为返回值
return wrapper
@my_decorator
def func1():
print('func1 welcome')
func1()
#######
#my_decorator
#wrapper
#func1 welcome
实例2
def repeat(num):
print('repeat')
def my_decorator(func):
print('my_decorator')
def wrapper(*args, **kwargs):
print('wrapper')
for i in range(num):
func(*args, **kwargs)
return wrapper
return my_decorator
@repeat(3)
def func1():
print('func1 welcome')
func1()
迭代器/生成器
- 容器(list,dict,str,tuple,set)是可迭代对象,可迭代对象调用iter()函数得到一个迭代器。迭代器可以通过next函数获取下一个函数,从而支持遍历
- 生成器是一种特殊的迭代器(反之不处理)。生成器相比迭代器占用个小的内存
迭代器
- 占用内存高,一次性获取
- 有限集合
x=[x for x in range(10000)]
生成器
- 占用内存小,next一次计算一次。调用 next() 函数的时候,才会生成下一个变量
- 无限集合
x=(x for x in range(10000))