Python中的lambda函数
- lambda函数也叫匿名函数,即,函数没有具体的名称,而用def创建的方法是有名称的。lambda允许用户快速定义单行函数,当然用户也可以按照典型的函数定义完成函数。lambda的目的就是简化用户定义使用函数的过程。
- 函数定义:lambda [arguments]: expression。例如:
log2 = lambda x:log(x) / log(2)
再例如:
>>>bar=lambda :'this is a bar' >>>print bar this is a bar
python中的operator.itemgetter()和operator.attrgetter()函数
- 在排序时, 可以用lambda表达式将对象map成keys;例如
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] sorted(students, key=lambda student : student[2])
- 亦可以使用operator包中的attrgetter和itemgetter函数以提高效率
a = [1,2,3] >>> b=operator.itemgetter(1) //定义函数 b,获取对象的第1个域的值 >>> b(a) //现在定义的b相当于一个运算符,现在给它一个参数a,就可以运算 2 >>> b=operator.itemgetter(1,0) //定义函数b,获取对象的第1个域和第0个的值 >>> b(a) (2, 1)
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),看上面例子,attrgetter则是取字典中相应键的值,看下面例子:
# 考虑 Student 对象 class Student: def __init__(self, name, grade, age): self.name = name self.grade = grade self.age = age def __repr__(self): return repr((self.name, self.grade, self.age)) # 建立一组Student对象 students = [ Student('jane', 'B', 12), Student('john', 'A', 12), Student('dave', 'B', 10), ] from operator import itemgetter, attrgetter # 对students按照年龄排序 print sorted(students, key=attrgetter('age')) # 其等价于 print sorted(students, key=lambda o: o.age) # 输出: >>> [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] # 亦可以按多个key排序, 先按age再按grade排序 print sorted(students, key=attrgetter('age', 'grade')) # 输出: >>> [('dave', 'B', 10), ('john', 'A', 12), ('jane', 'B', 12)]