1. 程式人生 > >python 自定義函式的屬性

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

參考
特殊屬性 官方