简单说下在初学Python过程当中遇到的难以理解的概念:生成器、迭代器、装饰器必须有一席之地!
如果你连生成器、迭代器、装饰器都没听过,那么推荐一份超全路径Python学习资料赶快学习一下吧!
1、生成器
在Python中,这种一边循环一边计算的机制,称为生成器:generator。
创建生成器的方法:
1)只需要把一个列表生成式的[]改成(),就创建了一个生成器
g = (x * x for x in range(10))
2)这里最难理解的是生成器和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成生成器的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
def odd():
print("step 1")
yield 1
print("step 2")
yield(3)
print("step 3")
yield(5)
2、迭代器
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
可以以直接作用于for循环的对象统称为可迭代对象:Iterable。
生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
可以使用isinstance()判断一个对象是否是Iterable对象。
from collections.abc import Iterator
isinstance((x for x in range(10)), Iterator)
返回结果:True
isinstance([], Iterator)
返回结果:False
isinstance({}, Iterator)
返回结果:False
isinstance("abc", Iterator)
返回结果:False
3、装饰器
在代码运行期间动态增加功能的方式,称之为“装饰器”。装饰器可以增强函数的功能,定义起来虽然有点复杂,但使用起来非常灵活和方便。
import functools
def log(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print("call%s():" % func.__name__)
return func(*args, **kw)
return wrapper
看完之后还是云里雾里?没关系,领取这份超全路径Python学习资料,学习之后一定就都懂了!