1. 程式人生 > 程式設計 >簡單瞅瞅Python vars()內建函式的實現

簡單瞅瞅Python vars()內建函式的實現

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。