python中的operator模块

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

更新中。。。

参考文章:

  1. python operator模块学习
  2. operator — 标准运算符替代函数
发布了149 篇原创文章 · 获赞 931 · 访问量 181万+

猜你喜欢

转载自blog.csdn.net/liuweiyuxiang/article/details/102478071