Python 的函数特殊属性
__doc__
用于获取函数的文档说明,如果没有,则返回None。
__name__
获取函数的名称
例如:
In [72]: def demo(a:3,b:'str') -> int:
...: return a
In [77]: demo.__name__
Out[77]: 'demo'
__qualname__
获取函数的qualname,点示法显示函数名称、所在的类、模块等梯级地址。
__module__
返回函数所在的模块,如果无则返回None。
__defaults__
函数的默认参数是保存在 defaults 中的。以元组的形式返回函数的默认参数,如果无默认参数则返回None。
例如{} 不能作为默认参数的问题。如果是可变类型,则在函数体内对其修改会导致默认参数值发生变化。
In [86]: def func(d={}):
...: d[1]='test'
...: return d
...:
In [87]: func.__defaults__
Out[87]: ({},)
In [88]: func()
Out[88]: {1: 'test'}
In [89]: func.__defaults__
Out[89]: ({1: 'test'},)
__code__
返回已编译的函数对象。
__globals __
以字典的形式返回函数所在的全局命名空间所定义的全局变量。
__dict__
以字典的形式返回命名空间所支持的任意自定义的函数属性。
__closure__
以包含cell的元组形式返回闭包所包含的自由变量。
__annotations __
python3.x引入了函数注释,增强函数的注释功能。可以使用:对参数逐个注释,注释内容可以是任何形式,比如参数的类型,作用,取值范围等等,返回值使用->标注,所有的注释都会保存至函数的属性(__annotations__)中,可以通过函数的特殊属性__annotations__获取,结果会以字典的形式返回。这些函数注释不影响默认参数的使用。
# 例如刚刚定义的demo函数,就加上了注释。
In [74]: demo.__annotations__
Out[74]: {'a': 3, 'b': 'str', 'return': int}
__kwdefaults__
强制关键字参数
在正常的函数参数中存在一个"*",在该符号之后的所有参数(可以是一个,多个)均被称为强制关键字参数。必须通过关键字参数的形式传递该参数,例如(age=2)。如下面一个例子
关于这些属性的官网汇总如下: