python 装饰器、生成器、迭代器
2020-12-13 03:25
标签:list param strong tar end 作用域 ret 迭代 turn 作用:为其他函数增加功能 装饰器必须要明白以下几点: 1.作用域 2.高阶函数 3.闭包 什么是生成器: 生成器本身是没值的,只有你调用了,才会给你返回值。 列表就好比是,厨师把所有的菜全部端上桌子,你想吃那个你点那个,不过有占地方 生成器就好比是,厨师还没做,当你点完所有想吃的菜之后,厨师先只给你做一个,只有你把前面的菜吃完了,才能给你继续做下一个。 创建生成器: 1、(x for x in range(10)) 2、yeild 查看生成器的值: 1、next() 等同于 __next__() 2、for循环 3、send send方法与,next方法类似。,用于yield的前的变量。 send方法可以为变量传值,前提是必须要有变量。 如果生成器还没进入,但还要使用send 方法,参数必须是None。 生成器都是迭代器,但迭代器不一定是生成器。 什么是可迭代对象(iterable): 能被iter方法调用,例:列表,元祖,字典,集合,字符串 什么是迭代器(iterator): 能被iter方法,next方法调用。 for循环内部所做的事情: 1.调用可迭代对象的iter方法,返回一个迭代器对象 2.调用迭代器对象的next方法 3.处理StopIteration python 装饰器、生成器、迭代器 标签:list param strong tar end 作用域 ret 迭代 turn 原文地址:https://www.cnblogs.com/py-peng/p/10774601.html装饰器
from functools import reduce
import time
def outside(func):
def inside(*args):
start = time.time()
func(*args)
end = time.time()
result = end - start
print(result)
return inside
@outside #同于 add = outside(add)
def add(*args):
num = reduce(lambda a,b : a+b, args)
time.sleep(0.2)
print(num)
@outside
def mul(*args):
num = reduce(lambda a,b : a*b, args)
time.sleep(0.4)
print(num)
if __name__ == "__main__":
add(*range(1,101))
mul(*range(1,6,2))
生成器
num = (x**2 for x in range(1,11))
def func():
print("first")
yield 1
print("second")
yield 2
# 此时的func函数就是一个生成器对象
num = (x**2 for x in range(1,11))
print(next(num))
print(next(num))
def func():
print("first")
yield 1
print("second")
yield 2
for i in func():
print(i)
为什么使用for 就不用再使用next 了呢?因为for循环内部有一个next(),所以在for循环中不需在调用next()
def func():
print("first")
parameter = yield 1
print(parameter)
yield 2
yield "third"
f = func() # f是生成器对象
f.send(None)
f.send("second")
print(next(f))
迭代器
# 创建迭代器对象
number = [1,2,3]
print(type(number)) #