在python中函数也是对象, 除了 __doc__,函数对象还有很多属性。使用 dir 函数可以探知 factorial 具有下述属性:

其中大多数属性是 Python 对象共有的。本节讨论与把函数视作对象相关的几个属性,先从__dict__ 开始
与用户定义的常规类一样,函数使用 __dict__ 属性存储赋予它的用户属性。这相当于一种基本形式的注解。一般来说,为函数随意赋予属性不是很常见的做法,但是 Django 框架这么做了。参见“The Django admin site”文档(https://docs.djangoproject.com/en/1.10/ref/contrib/admin/)中对 short_description、boolean 和 allow_tags 属性的说明。这篇 Django文档中举了下述示例,把 short_description 属性赋予一个方法,Django 管理后台使用这个方法时,在记录列表中会出现指定的描述文本:

下面重点说明函数专有而用户定义的一般对象没有的属性。计算两个属性集合的差集便能得到函数专有属性列表

用户定义的函数的属性
| 名称 | 类型 | 说明 |
|---|---|---|
__annotations__ | dict | 参数和返回值的注解 |
__call__ | method-wrapper | 实现 () 运算符;即可调用对象协议 |
__closure__ | tuple | 函数闭包,即自由变量的绑定(通常是 None) |
__code__ | code | 编译成字节码的函数元数据和函数定义体 |
__defaults__ | tuple | 形式参数的默认值 |
__get__ | method-wrapper | 实现只读描述符协议 |
__globals__ | dict | 函数所在模块中的全局变量 |
__kwdefaults__ | dict | 仅限关键字形式参数的默认值 |
__name__ | str | 函数名称 |
__qualname__ | str | 函 数 的 限 定 名 称, 如 Random.choice参阅 PEP 3155 ,https://www.python.org/dev/peps/pep-3155/ |
本文介绍了在Python中,函数被视为对象的特点,特别关注了__dict__属性以及与之相关的其他函数特有属性,如__annotations__,__call__,__closure__,__code__,__defaults__,__get__,__globals__,__kwdefaults__,__name__,__qualname__等,并提到了Django框架中函数属性的应用实例。
1159

被折叠的 条评论
为什么被折叠?



