0 operator模块简介
operator 模块提供了一套与Python的内置运算符对应的高效率函数。例如,operator.add(x, y) 与表达式 x+y 相同。 许多函数名与特殊方法名相同,只是没有双下划线。为了向后兼容性,也保留了许多包含双下划线的函数。为了表述清楚,建议使用没有双下划线的函数。
函数包含的种类有:对象的比较运算、逻辑运算、数学运算以及序列运算。
operator模块中包含很多函数,对于简单函数不做过多的介绍。本篇博客会介绍operator模块中一些不太容易理解的函数,并且是持续更新。
1 methodcaller函数
methodcaller函数的定义可以理解为:
def methodcaller(name, *args, **kwargs):
def caller(obj):
return getattr(obj, name)(*args, **kwargs)
return caller
可以看到这是一个闭包,返回的是一个可以调用的函数对象函数,并且可以传递参数给最终要调用的方法。
调用的形式如下:
- After f = methodcaller(‘methodname’), the call f(b) returns b.name().
- After f = methodcaller(‘methodname’, ‘foo’, bar=1), the call f(b) returns b.name(‘foo’, bar=1).
例子:
#coding:utf-8
from operator import methodcaller
class Student(object):
def __init__(self, name):
self.name = name
def getName(self):
return self.name
def setName(self, newName):
self.name = newName
return self.name
stu = Student("Jim")
func = methodcaller('getName')
print func(stu) #调用student对象的getName方法
func2 = methodcaller('setName', 'Tom')
print func2(stu) #调用student对象的setName方法,并给参数newName传值
Jim
Tom
更新中。。。
参考文章: