博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【python学习】之五、可调用对象
阅读量:5055 次
发布时间:2019-06-12

本文共 2356 字,大约阅读时间需要 7 分钟。

在python中有四种可调用对象:函数,方法,类,类的实例

1、函数

(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__'
'

2、方法

(1)内建方法(BIM built-in Method)     只有内建类型才有内建方法,

>>> type([].append)
>>> [].append
type函数给出了和BIF一样的输出。

我们再来看一下内建函数作用到内建方法上: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 于南昌

转载于:https://www.cnblogs.com/java20130723/archive/2012/08/07/3211422.html

你可能感兴趣的文章
BZOJ 1531 二进制优化多重背包
查看>>
BZOJ 2324 (有上下界的)费用流
查看>>
python3基础06(随机数的使用)
查看>>
Zookeeper系列(二)特征及应用场景
查看>>
【HTTP】Fiddler(三)- Fiddler命令行和HTTP断点调试
查看>>
Spring Boot使用Druid和监控配置
查看>>
poi 处理空单元格
查看>>
Android 内存泄漏优化总结
查看>>
luogu4849 寻找宝藏 (cdq分治+dp)
查看>>
Spring Cloud微服务笔记(五)Feign
查看>>
C语言键盘按键列表
查看>>
Codeforces Round #374 (Div. 2)
查看>>
oracle数据类型
查看>>
socket
查看>>
二叉索引树 树状数组
查看>>
日志框架--(一)基础篇
查看>>
Java设计模式之原型模式
查看>>
哲理故事与管理之道(20)-用危机激励下属
查看>>
关于源程序到可运行程序的过程
查看>>
转载:mysql数据库密码忘记找回方法
查看>>