python 自定义函数的属性

名称 类型 说明 改变
__annotions __ dict 参数和返回值的注解,无,则空dict 读写
__call __ method-wrapper 实现()运算符,即可调用对象协议 读写
__closure __ tuple 函数闭包,即自由变量的绑定(通常是None) 只读
__code __ code 编译成字节码的函数元数据和函数定义体 读写
__defaults __ tuple 位置或关键字参数的任何默认值的元组,无,则是None 读写
__get __ method-wrapper 实现只读描述符协议 读写
__globals __ dict 函数所在模块中的全局命名空间 读读
__kwdefaults __ dict 仅限关键字形式参数的默认值,无,则是None 读写
__name __ str 函数名称 读写
__qualname __ str 函数的限定名称,如Random.choice 读写
__doc __ str 文档字符串,不会被子类继承,无,则是None 读写

__code __本身就是一个对象,有15个属性,列举几个常用的属性

名称 类型 说明
co_argcount int 函数的位置参数和关键字参数的个数
co_kwonlyargcount 元组 仅限关键字参数的个数 的元组
co_freevars tupe 自由变量名称元组(通过函数的闭包引用)
co_name str 用于定义此代码对象的名称,即函数名
co_names tupe 局部变量名称的元组
co_nlocals int 局部变量数
co_filename str 创建此代码对象的文件的名称
co_varnames tuple 参数和局部变量的名称的元组
def make_averager():
   series = []
   zz = 88
   def averager(new_valuer=11,*,g=22,c=99):
        print(zz)
        series.append(new_valuer)
        total = sum(series)
        return total/len(series)
    return averager

av = make_averager()
print(av.__code__)
<code object averager at 0x000002635A6A9030, file "D:/pythoncodesaveplace/TicTacToe/1.py", line 18>
print(av.__code__.co_argcount)
1   #指的是POSITIONAL_OR_KEYWORD
print(av.__code__.co_kwonlyargcount)
2  #指的是g,c参数
print(av.__code__.co_freevars)
('series','zz')
print(av.__code__.co_name)
averager
print(av.__code__.co_names)
('append', 'sum', 'len')
print(av.__code__.co_nlocals)
3  #指的是('new_valuer', 'g', 'total')这几个变量
print(av.__code__.co_filename)
D:/pythoncodesaveplace/TicTacToe/1.py
print(av.__code__.co_varnames)
('new_valuer', 'g', 'total')

__closure __是元组,存放自由变量对象

av(10)
av(11)
print(av.__closure__)
(<cell at 0x000001A30D936618: list object at 0x000001A30D9EA548>,<cell at 0x000001A30D936648: int object at 0x00000000616071A0>)
print(av.__closure__[0])
<cell at 0x000001A30D936618: list object at 0x000001A30D9EA548>
print(av.__closure__[0].cell_contents)
[10,11]
print(av.__closure__[1])
<cell at 0x000001A30D936648: int object at 0x00000000616071A0>
print(av.__closure__[1].cell_contents)
88

defaults __ 指的是POSITIONAL_OR_KEYWORD参数的默认值

print(av.__defaults __)
(11,)

__kwdefaults __指的是KEYWORD_ONLY仅限关键字参数的默认值

print(av.__kwdefaults __)
{'g': 22,c=99}

__qualname __

print(av.___qualname_ __)
make_averager.<locals>.averager

__name __

print(av.___name_ __)
averager

参考
特殊属性 官方

猜你喜欢

转载自blog.csdn.net/qq_29232389/article/details/86152971