Python语法糖
语法糖(Syntactic sugar)是英国计算机科学家彼得·约翰·兰达发明的一个术语,指计算机语言中添加的某种语法,这些语法没有给程序增加新功能,但是对于程序员更“甜蜜”。语法糖提供了更易读的编码方式,可以提高开发效率。
Python语法糖总结:
1、匿名函数(lambda表达式)
用在不能定义函数的地方,作为一个表达式,实现了函数的功能。
2、过滤(filter)、映射(map)、化简(reduce)、排序(sorted)
过滤(filter):选择列表中的某些元素,并过滤掉其他元素。接受一个函数和一个序列,函数作用于序列的每个元素,根据返回值是True还是False决定是否保留。filter函数返回一个迭代器(Iterator),可以用list函数获取所有结果并返回列表。
映射(map):将一个函数对应到一个序列的每个元素上。接收一个函数和一个可迭代对象,返回一个迭代器。
化简(reduce):将一个序列的元素值合起来到一个单独的变量。接收一个函数和一个序列,把函数作用在序列上。函数必须有两个参数,reduce按顺序处理,前面处理结果和下一个元素继续处理。reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
排序(sorted):将一个序列按顺序排列。接收三个参数,第一个可迭代对象,第二个key函数自定义排序规则(比如key=abs按绝对值,key=str.lower忽略大小写只按字母顺序),第三个reverse=True反向排序。返回一个列表。
3、装饰器(Decorator)
不修改函数定义,而给函数增加功能(常用的用途有输出日志、记录开始和结束时间)
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程
简单装饰器
一个参数的装饰器
多个参数的装饰器
4、偏函数(partial函数)
函数需要两个参数,只有一个参数已知,可以定义一个partial函数传入已知参数,待未知参数确定可以直接用调用单参数函数。
5、with的用法
6、迭代器与生成器??
两个值求最大最小值:a3 = [a1, a2][a1 < a2](相当于:a3 = [a1, a2][int(a1 < a2]),利用列表下标和True=1、False=0的对应关系来取值)
列表生成式和生成器
列表生成式:[s1 + s2 for s1 in 'abc' for s2 in 'xyz' if s1 != 'a']
得到:['bx', 'by', 'bz', 'cx', 'cy', 'cz']
生成器,可以直接把列表生成式改造成生成器(中括号改为小括号),或生成器函数用yield返回值,以下为斐波那契数列生成器:
def fib(max):
n, a, b = 0, 0, 1
while n<max:
yield b
a, b = b, a+b
n = n+1
return 'done'
for n in fib(6):
print(n)
闭包(Closure,别的语言也有):注意返回函数不要引用任何循环变量,或者后续会发生变化的变量。