在python中有四种可调用对象:函数,方法,类,类的实例
1、函数
2、方法(1)内建函数(BIF Built-in Function): 用C/C++来写的,在__bulitin__模块里,并作为__builtin__模块导入到解释器中去!
>>> dir(type)['__abstractmethods__', '__base__', '__bases__', '__basicsize__', '__call__', '__class__', '__delattr__', '__dict__', '__dictoffset__', '__doc__', '__eq__', '__flags__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__instancecheck__', '__itemsize__', '__le__', '__lt__', '__module__', '__mro__', '__name__', '__ne__', '__new__', '__prepare__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasscheck__', '__subclasses__', '__subclasshook__', '__weakrefoffset__', 'mro']>>> type(dir)通过代码可以知道,dir()可以列出函数的多有属性。type()返回产生对象的类型!
(2)用户自定义函数(UDF User-Defined Function) 是用python写的,他定义在模块的最高级!
从内部机制看,用户自定义函数是”函数“类型的。
>>> def a(): pass>>> type(a)(3)lambda表达式 这里和自定义函数有所不同,这里不是用def创建的函数,而是用lambda关键字!
>>> b = lambda x: x * x>>> b(10)100>>> type(b)>>> a.__name__'a'>>> b.__name__' '
(1)内建方法(BIM built-in Method) 只有内建类型才有内建方法,
>>> type([].append)type函数给出了和BIF一样的输出。>>> [].append
我们再来看一下内建函数作用到内建方法上:dir()
>>> dir([].append)['__call__', '__class__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'](2)用户定义的方法(UDM User-defined method) 他包含在类定义中。只是拥有标准函数的包装,仅有定义它们的类可以使用。子类中如果不覆盖那么也可以使用!
>>> class C(object): #类 def a(self): #UDM pass >>> c = C() #实例化>>> type(c) #实例的类别>>> type(C) #类的类别 >>> type(c.a) #绑定方法的类别 >>> type(C.a) #非绑定方法的类别 3、类
这里不多说了
4、类的实例
在python中提供了一个__call__的特别方法,这个方法允许程序员城建可调用的对象(实例)。
如:a() 和 a.__call__(a)的效果是相同的。 如果__call__有参数,__call__(self, a)那么调用就会像这样:a(b) == a.__call__(a, b)!!
>>> class C(object): def __call__(self, *args): print 'a:\n', args >>> c = C() #实例化>>> c<__main__.C object at 0x025F2ED0>>>> callable(c) #检测实例是否可调用True>>> c() #调用实例a:()>>> c(1)a:(1,)
2012/8/7
jofranks 于南昌