পাইথন ইন্টারপ্রিটার যখন একটি সোর্স ফাইল পড়ে, সেটি সেটি ফাইলে পাওয়া সকল কোড এক্সিকিউট করে। কোড এক্সিকিউশনের আগে, এটি কিছু বিশেষ ভেরিয়েবল ডিফাইন করে। উদাহরণস্বরূপ, যদি পাইথন ইন্টারপ্রিটার সেই মডিউলটিকে (সোর্স ফাইলটিকে) মেইন প্রোগ্রাম হিসেবে চালায়, তবে সেটি বিশেষ __name__ ভেরিয়েবলের মান "__main__" সেট করে। যদি এই ফাইলটি অন্য মডিউল থেকে ইমপোর্ট করা হয়, তবে __name__ মডিউলের নাম সেট করা হয়।
এটি কেন ব্যবহার করা হয়?
একটি মডিউল (একটি .py ফাইল) লিখার সময় এটি হয় সরাসরি এক্সিকিউট করা যায়, আবার অন্য মডিউলে ইমপোর্ট করে ব্যবহার করার योग্যও থাকে। এই মেইন চেক করার মাধ্যমে আপনি সেই কোডটি শুধু তখন এক্সিকিউট করতে পারবেন যখন আপনি মডিউলটিকে একটি প্রোগ্রাম হিসেবে চালাতে চান, এবং কেউ আপনার মডিউল ইমপোর্ট করে শুধু ফাংশন কল করতে চাইলে সেটি এক্সিকিউট হবে না।
উদাহরণ
দুটি ফাইল থাকা কল্পনা করুন: one.py এবং two.py।
one.py:
def func():
print("func() in one.py")
print("Root of one.py")
if __name__ == "__main__":
print("one.py is being run directly")
else:
print("one.py is being imported")
two.py:
import one
print("Root of two.py")
one.func()
if __name__ == "__main__":
print("two.py is being run directly")
else:
print("two.py is being imported")
আউটপুট:
$ python one.py চালালে আউটপুট:
Root of one.py
one.py is being run directly
$ python two.py চালালে আউটপুট:
Root of one.py
one.py is being imported
Root of two.py
func() in one.py
two.py is being run directly