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}