locals()` আপনাকে লোকাল স্কোপে ডিক্লেয়ার করা ভেরিয়েবলগুলোর একটি ডিকশনারি রিটার্ন করে, যখন globals()` গ্লোবাল স্কোপে ডিক্লেয়ার করা ভেরিয়েবলগুলোর একটি ডিকশনারি রিটার্ন করে। গ্লোবাল স্কোপে, locals()` এবং globals()` দুটোই গ্লোবাল নেমস্পেসের একই ডিকশনারি রিটার্ন করে। দুটি ফাংশনের পার্থক্য বুঝতে আপনি সেগুলো একটি ফাংশনের ভেতরে থেকে কল করতে পারেন। উদাহরণস্বরূপ,
def fun():
var = 123
print "Locals: ", locals()
print "Vars: ", vars()
print "Globals: ", globals()
fun()
এটি নিচের আউটপুট দেবে:
Locals: {'var': 123}
Globals: {'__builtins__': , '__name__': '__main__', 'fun': , '__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}