1、函数装饰器有什么作用?
装饰器本质上是一个Python 函数,它可以在让其他函数在不需要做任何代码的变动的前提下增加额外的功能。
装饰器的返回值也是一个函数的对象,它经常用于有切面需求的场景。
比如:插入日志、性能测试、事务处理、缓存、权限的校验等场景 有了装饰器就可以抽离出大量的与函数功能本身无关的雷同代码并发并继续使用。
2、生成器、迭代器的区别?
迭代器是一个更抽象的概念,任何对象,如果它的类有 next 方法和 iter 方法返回自己本身,对于 string、list、dict、tuple 等这类容器对象,使用 for 循环遍历是很方便的。
在后台 for 语句对容器对象调用 iter()函数,iter()是 python 的内置函数。iter()会返回一个定义了 next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()
也是 python 的内置函数。在没有后续元素时,next()会抛出一个 StopIteration 异常。
生成器(Generator)是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,只是在需要返回数据的时候使用 yield 语句。
每次 next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)
区别:生成器能做到迭代器能做的所有事,而且因为自动创建了 iter()和 next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。
除了创建和保存程序状态的自动方法,当发生器终结时,还会自动抛出 StopIteration 异常。
3、 X 是什么类型?
X = (for i in ramg(10))
X 是 generator 类型。
4、请尝试用“一行代码”实现将 1-N 的整数列表以 3 为单位分组,比如 1-100
分组后为?
print([[x for x in range(1,100)][i:i+3] for i in range(0,len(list_a),3)])
5、Python 中 yield 的用法?
yield 就是保存当前程序执行状态。
你用 for 循环的时候,每次取一个元素的时候就会计算一次。
用 yield 的函数叫 generator,和 iterator 一样,它的好处是不用一次计算所有元素,而是用一次算一次,可以节省很多空间。
generator每次计算需要上一次计算结果,所以用 yield,否则一 return,上次计算结果就没了。