簡單瞅瞅Python vars()內建函式的實現
阿新 • • 發佈:2020-01-09
0.偶然間看到一個奇怪的現象
>>> x = 1 >>> a = var() >>> a['x'] 1
這是啥操作??用help(vars)之後,我才知道......
>>> help(vars) Help on built-in function vars in module builtins: vars(...) vars([object]) -> dictionary Without arguments,equivalent to locals(). With an argument,equivalent to object.__dict__.
如果,沒傳入引數就將相當於locals(),嗨,我還以為什麼語法糖呢......
不知道locals()的老鐵們,可以先自己試一試,之後會寫
1.vars()走起
vars() 函式返回引數物件object的屬性和屬性值的字典物件
實際上呼叫了物件內部定義的__dict__屬性
可以試試:
>>> vars(1) TypeError: vars() argument must have __dict__ attribute
由於1這個物件沒有__dict__ 屬性,所以報錯
當然,如果引數為空則相當於呼叫locals()函式
我們做個試驗:
class xx: def __init__(self): self.__dict__ = {'':'我是變數__dict__'}
接下來呼叫此類:
>>> a = xx() >>> vars(a) {'': '我是變數__dict__'}
沒錯吧,返回的是該物件的__dict__屬性
簡單說一下__dict__:
類的靜態函式、類函式、普通函式、全域性變數以及一些內建的屬性都是放在類的__dict__裡
一些內建的資料型別是沒有__dict__屬性的(可以嘗試下 vars('我沒有__dict__屬性')這個語句)
2.總結
- vars()在沒有傳入引數的時候,相當於呼叫locals()
- 若傳入自定義類的物件,則返回物件的__dict__屬性,大多數自定義類會隱式建立__dict__屬性
- 若傳入一些內建的資料型別,則由於其沒有__dict__屬性,會報錯:TypeError: vars() argument must have __dict__ attribute
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。