Python中的dir()、globals()和locals()函式有什麼區別?


locals()返回一個包含在區域性作用域中宣告的變數的字典,而globals()返回一個包含在全域性作用域中宣告的變數的字典。在全域性作用域中,locals()和globals()都返回指向全域性名稱空間的相同字典。要觀察這兩個函式的區別,可以在函式內部呼叫它們。例如:

def fun():
    var = 123
    print "Locals: ", locals()
    print "Vars: ", vars()
    print "Globals: ", globals()
fun()

這將給出以下輸出:

Locals:  {'var': 123}
Globals:  {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', 'fun': <function fun at 0x00000000
037E3DD8>, '__doc__': None, '__package__': None}

vars() 函式要麼返回當前名稱空間的字典(如果未帶引數呼叫),要麼返回引數的字典。locals()和vars()的主要區別在於vars()可以接收引數並返回所需物件的字典。例如,如果想要物件的屬性以字典形式表示,可以傳遞該物件並獲取該例項的屬性字典。

對於物件而言,vars()函式類似於物件的`__dict__`屬性。`__dict__`返回物件的所有已定義屬性。例如:

class A():
    def __init__(self, id):
        self.id = id
a = A(1)
print "__dict__: ", a.__dict__
print "vars(a): ", vars(a)

這將給出以下輸出:

__dict__:  {'id': 1}
vars(a):  {'id': 1}

更新於:2019年9月30日

601 次瀏覽

開啟你的職業生涯

完成課程,獲得認證

開始學習
廣告
© . All rights reserved.