美文网首页
Callable对象动态生成函数

Callable对象动态生成函数

作者: GradientDescent | 来源:发表于2017-11-28 11:44 被阅读0次

--- 2017.11.28

动机

有一批相似的函数,代码逻辑是重复的,只有几个参数是不同的;比如在bigflow里输出counter,counter.increase("my_counter_a") 需要定义成函数:

def my_counter_a(r):
    counter.increase("my_counter_a")
    return r

my_pcollection.map(my_counter_a)

当要输出很多counter时,就很烦了。

解法

可以定义一个Callable对象,在运行时生成函数对象(其实类似C++里的仿函数的用法):

from collections import Callable
from bigflow import counter

class Counter(Callable):
    def __init__(self, counter_name):
        self.counter_name = counter_name

    def __call__(self, record):
        counter.increase(self.counter_name)
        return record

my_pcollection.map(Counter("my_counter_a"))

collections.Callable 的实现在 lib/python2.7/_abcoll.py, 使用了 metaclass,后续研究一下再补充。

---2017.11.29
今天发现Callable对象跟function还是不一样,不能用在pcollection.map()里;

又想了另一个方法:

def _do_counter(record, counter_name):
     counter.increase(counter_name)
     return record

相关文章

  • Callable对象动态生成函数

    --- 2017.11.28 动机 有一批相似的函数,代码逻辑是重复的,只有几个参数是不同的;比如在bigflow...

  • python装饰器类的写法

    装饰器函数其实是这样一个接口约束,它必须接受一个callable对象作为参数,然后返回一个callable对象。那...

  • 类装饰器

    装饰器函数其实是一个接口约束,它必须接受一个callable对象作为参数,然后返回一个callable对象。在py...

  • 原型链__proto__和prototype关系

    一般对象的属性规则 对象有__proto__属性,函数有prototype属性; 对象由函数生成 生成对象时,对象...

  • 关于this

    this是什么 在函数运行时,基于调用位置的条件自动生成的内部对象,可以理解为动态绑定对象到this上。 需要强调...

  • C++ class类初始化

    默认构造函数法 生成对象的方式: 构造函数初始化列表 生成对象的方式:

  • 简单了解:对象、构造函数、 new

    构造函数是什么?答:用于生成对象的函数。 对象不是直接声明即可吗?为什么还要用构造函数生成对象,如var obj ...

  • python数据分析基础(11)-是否可调用

    1、判断对象是否可被调用 能被调用的对象就是一个callable对象,比如函数str, int 等都是可被调用的 ...

  • python callable()方法

    callable(object) 该函数的作用是检查对象object是否可调用。如果返回True,object仍然...

  • 第二天:Python函数

    函数 isinstance(x, int):检查参数类型callable(object):检查一个对象是否是可调用...

网友评论

      本文标题:Callable对象动态生成函数

      本文链接:https://www.haomeiwen.com/subject/iipsbxtx.html