列表推导式
a = [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]
执行顺序同for循环,返回值a是一个列表
元组推导式
(表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] )
和列表推导式做对比,你会发现,除了元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是 [],其它完全相同。不仅如此,元组推导式和列表推导式的用法也完全相同。
但是元组推导式返回的是生成器对象,并不是元组,和列表推导式稍有不同。
无论是使用 for 循环遍历生成器对象,还是使用 next() 方法遍历生成器对象,遍历后原生成器对象将不复存在,这就是遍历后转换原生成器对象却得到空元组的原因。
lambda表达式
lambda 匿名函数
语法:lambda [arg1 [,arg2,…argn]]:expression
调用lambda函数:
sum = lambda a,b: a+b
sum(10,20) # 30
sum(20,30) # 50
https://www.cnblogs.com/jixn/p/14117386.html
https://www.runoob.com/python/python-functions.html
更复杂的用法 https://zhuanlan.zhihu.com/p/27607704
问号表达式
使用if else实现
b = 5
a = 2 if b == 4 else 1
print a
生成器 generator
一边循环一边计算出后续的元素,节省大量空间,元组推导式返回的就是生成器。
generator保存的是算法,调用next()函数,或者遍历生成器,就能计算出生成器下一个元素的值,直到没有元素为止。
当函数里面使用yield关键字,调用函数时,遇到yield就中断返回yield后面的值,再次调用该函数,会从yield的位置继续执行,直到结束。
https://www.runoob.com/python3/python3-iterator-generator.html
迭代器
迭代用于访问集合元素,可以记住遍历的位置,从可迭代对象【Iterable】的第一个元素开始遍历,直到所有元素都被遍历一遍结束,迭代器只能前进不会后退。
迭代器两个基本方法,iter() 创建迭代器 next() 输出迭代器的下一个元素-遍历,可用for循环遍历。
list dict str 都是可迭代对象,但是不是迭代器,iter()函数将Iterable变成Iterator
a = [1,2,3]
ite = iter(a)
next(ite)
装饰器 Decorators
是修改其他函数的功能的函数–>不改变函数代码但是增加函数功能。
python装饰器封装一个函数,用各种方式来修改他的行为,使用 @ 符号是一个简短的方式来生成一个被装饰的函数。
@wraps接受一个函数来进行装饰,并加入了复制函数名称、注释文档、参数列表等等的功能。这可以让我们在装饰器里面访问在装饰之前的函数的属性。