Python之匿名函数
匿名函数指一类无须定义标识符的函数或子程序。Python用lambda语法定义匿名函数,只需用表达式而无需申明。
lambda 函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方
常规版本:
def fun(x,y) return x*y
lambda版本:
r = lambda x,y:x*y print r(2,3)
格式:
lambda 参数列表:return [表达式] 变量
由于lambda返回的是函数对象(构建的是一个函数对象),所以需要定义一个变量去接收
匿名函数优点:
- 使用Python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
- 对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题
- 使用lambda在某些时候然后代码更容易理解
搭配reduce的应用
reduce(fun,list)
reduce依次把list中的数字赋值给fun进行计算
注意fun必须是连个数字间的运算,list必须是整型数字
打印列表元素的平方
for i in map(lambda x:x*x,[0,1,2,3,4]): print(i) #0 1 4 9 16
筛选长度大于3的字符串
l1 = ['232','31231','21'] func = lambda x:len(x)>3 for i in filter(func,l1): print(i)
现在有两元祖 (('a'),('b')),(('c'),('d')),请使用 python 中的匿名函数生成列表[{'a':'c'},{'b':'d'}]
func = lambda x,y:[{x[0]:y[0]},{x[1]:y[1]}] tu1 =(('a'),('b')) tu2 = (('c'),('d')) l = func(tu1,tu2) print(l) #[{'a': 'c'}, {'b': 'd'}]
理解%r和%s的区别
%r
会重现所表达的对象,%s
会将所有转成字符串
eg1:
print('i am %s years old' % 22) print('i am %r years old' % 22) >>>>>>>>>>>>>>>>>>>>>>>> i am 22 years old i am 22 years old
eg2:
t = 'i am %d years old' % 22 print('i said %s' % t) print('i said %r' % t) >>>>>>>>>>>>>>>>>>>>>>>> i said i am 22 years old i said 'i am 22 years old'
eg3:
import datetime d = datetime.date.today() print('%s' % d) print('%r' % d) >>>>>>>>>>>>>>>>>>>>>>>> 2017-6-26 datetime.date(2017, 6, 26)
sorted与.sort()区别
Sorted(效率高,用C语言写的) 返回的是列表,
排序完形成新列表,并返回
list.sort()改变原列表