Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

อะไรคือความแตกต่างระหว่างฟังก์ชัน dir (), globals () และ locals () ใน Python?


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() สามารถรับอาร์กิวเมนต์และส่งคืนพจนานุกรมสำหรับอ็อบเจกต์ที่ร้องขอได้ ตัวอย่างเช่น หากคุณต้องการแอตทริบิวต์ของวัตถุใน dict คุณสามารถส่งวัตถุนั้นและรับแอตทริบิวต์ dict สำหรับอินสแตนซ์นั้นได้

ฟังก์ชัน 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}