匿名函数、列表推导式和生成器表达式
匿名函数:为了解决那些功能很简单的需求而设计的一句话函数。
函数名 = lambda 参数 :返回值 #参数可以有多个,用逗号隔开 #匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值 #返回值和正常的函数一样可以是任意数据类型
def fun(a,b): print(a+b) l =lambda a,b:a+b print(l(1,2)) # 3
我们可以看出,匿名函数并不是真的不能有名字。
匿名函数的调用和正常的调用也没有什么分别。 就是 函数名(参数) 就可以了
1 dic = {'a1':111,'a2':555,'a3':222} 2 print(max(dic,key=lambda k:dic[k])) 3 # a2 4 r = map(lambda a:a**2,[1,2,36]) 5 # print(r) 6 # <map object at 0x00000000010C4438> 7 for i in r: 8 print(i) 9 # 1 10 # 4 11 # 1296 12 13 r = [2,6,6,9,77] 14 f = filter(lambda a:a>10,[2,6,6,9,77]) 15 print(f) 16 # <filter object at 0x0000000000704400> 17 for i in f: 18 print(i) 19 # 77
列表推导式和生成器表达式
1.把列表解析的[]换成()得到的就是生成器表达式
2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存
3.Python不但使用迭代器协议,让for循环变得更加通用。大部分内置函数,也是使用迭代器协议访问对象的。例如, sum函数是Python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议
l = [i for i in range(2,10)] print(l) # [2, 3, 4, 5, 6, 7, 8, 9] l = (i for i in range(2,10)) print(l) # <generator object <genexpr> at 0x0000000000B9C678> print(list(l)) # [2, 3, 4, 5, 6, 7, 8, 9]