函数名的应用/列表推导式
函数名的运用:
1,特殊的变量。
2,函数名可以当做变量赋值。
3,函数名可以当做容器类类型的元素。
4,函数名可以当做函数的参数。
5,函数名可以当做函数的返回值
闭包:
1,内层函数对外层函数的变量(非全局)的引用。
2,闭包存在于函数中。
3,闭包要逐层返回,最终返回到函数的最外层。
特点:
解释器遇到闭包,不会随着函数的结束而结束空间
闭包应用:
装饰器。
爬虫。
可迭代对象:
obj
'__iter__' in dir(obj)
from collections import Iterable
isinstance(obj, Iterable)
可迭代对象不能直接取值,必须转化成迭代器进行取值(__next__)
迭代器:
'__iter__' in dir(obj) and '__next__' in dir(obj)
from collections import Iterator
isinstance(obj, Iterator)
一个next 对应一个元素
l1 = [1, 2, 3,]
obj = iter(l1)
while True:
try:
print(obj.__next__())
except Exception:
Break
生成器:本质就是迭代器,自己用python代码构建的迭代器。
1,生成器函数。(yield)
2,生成器表达式。(i for i in range(100))
生成器对象:gentor
next(gentor)
send(gentor)
for 循环
yield 与 return 区别?
send:
给上一个yield发送一个值
send 对应yield取值。
next:
对应一个yield 取值。
yield from 将一个可迭代对象变成一个迭代器返回。
列表推导式:
循环模式:[变量(加工后的变量) for 变量 in iterable]
三元模式:['*' if a > b else 变量 for 变量 in iterable]
筛选模式:[变量(加工后的变量) for 变量 in iterable if 条件]
优点:
一行代码搞定,简单,高逼格。
缺点:有毒。不能采用debug模式查错。
生成器表达式:与上面相同,将[] 换成()