python核心编程学习笔记-2016-08-16-01-可调用对象

        可调用对象

        定义为任何能通过函数操作符“()“来调用的对象,还可以通过函数式编程接口来调用,如apply(),filter(),map()和reduce()等。

        python共有四种可调用对象,分别是函数,方法,类和一些类的的实例(实现了__call__()方法的实例)。

        函数对象,非常好理解,不管是内建函数(BIF)还是用户自定义函数(UDF),显然可以通过函数操作符“()“来调用。对于lambda表达式,它其实定义的也是一个函数对象,只要是函数对象,显然可以用函数操作符“()“来调用。如

>>> lambdaFunc = lambda x: x * 2
>>> lambdaFunc(100)
200
        方法对象,也同函数对象一样, 不管是内建方法(BIM)还是用户自定义方法(UDM),都能通过函数操作符“()“来调用。

同理,类对象也一样,只不过调用类对象一般是创建实例。

>>> class C(object):
...     def __init__(self):
...         pass
...
>>> c = C() # 这既是调用类对象,也是实例化
        最后就是实现了__call__()方法的实例。正常来说,我们调用实例是不需要函数操作符的。如

>>> class C(object):
...     def __init__(self):
...         pass
>>> c = C()
>>> c # 调用实例,不需要函数操作符()
       但是如果实例所属的类中,定义了__call__()方法,情况就发生变化了,如

>>> class C(object):
...     def __init__(self):
...         pass
...
...     def __call__(self, *args):
...         print "I'm callable! Called with args:\n", args
...
>>> c = C()
>>> c() # 用函数操作符()调用实例,即等价于c.__call__()
I'm callable Called with arguments:
()
       从上面的例子可以看出,实现了__call__()方法的实例,当使用用函数操作符()调用实例时,其输出结果就是实例的__call__()方法的输出结果。





你可能感兴趣的:(python核心编程)