1
9hills 2015-02-15 13:55:42 +08:00
Python一切皆对象。function 也不例外
|
2
9hills 2015-02-15 13:57:20 +08:00
http://woodpecker.org.cn/diveintopython/getting_to_know_python/everything_is_an_object.html
比如所有函数都有 __doc__ 这个属性,你也可以增加新的属性上去。而且访问函数的属性不会执行函数 |
3
icedx 2015-02-15 13:58:00 +08:00
貌似Fuction 也是一个对象...
不过dir() 返回的必然是List 吧... 我觉得你想要的是type() |
4
tywtyw2002 OP @icedx 我就是感觉 居然一个function 还能用func.xx的方式去赋值。。。。
|
5
jiang42 2015-02-15 14:37:03 +08:00
|
6
ruoyu0088 2015-02-15 15:08:19 +08:00
所有的Python对象在C语言里面都是一个结构体。这个结构体的第二个字段指向表示这个对象的类型。例如函数a是一个结构体,它的第二个字段指向function这个对象。function对象里面定义了如何存取函数对象的__dict__属性:
https://github.com/python/cpython/blob/c7688b44387d116522ff53c0927169db45969f0e/Objects/funcobject.c#L434 读取__dict__属性时实际上调用如下的函数PyObject_GenericGetDict(): https://github.com/python/cpython/blob/347107218fd0ca2ba0bcfe97280ec17e902cf8c6/Objects/dictobject.c#L3797 看这个函数你就知道,function对象支持__dict__,但是只有在你第一次使用它时才会创建这个字典,所以不必担心每个函数都带一个不必要的字典对象,增加内存使用量。 |
7
Melodic 2015-02-15 16:24:36 +08:00
Python中函数的地位比类牛×多了
|
8
icedx 2015-02-15 16:30:32 +08:00
@tywtyw2002 其实就是类 建议去阅读源码
|