অন্য প্রোগ্রামিং ল্যাঙ্গুয়েজের মতো পাইথন কোড এক্সিকিউশন main ফাংশন থেকে স্পষ্টভাবে শুরু করার জন্য ডিজাইন করা নয়। __name__ নামক একটি স্পেশাল ভেরিয়েবল main ফাংশনালিটি প্রদান করে। এটি পাইথন ল্যাঙ্গুয়েজের একটি বিল্ট-ইন ভেরিয়েবল, তাই আমরা শুধু এই ভেরিয়েবলের ভ্যালু দেখার জন্য একটি প্রোগ্রাম লিখতে পারি।
print(type(__name__)) print(__name__)
আউটপুট:
__main__
উপরে দেখতে পাচ্ছেন __name__ ভেরিয়েবলের ভ্যালু স্ট্রিং ডেটা টাইপ এবং __main__-এর সমান।
__name__ ভেরিয়েবলের দুটি মূল বৈশিষ্ট্য নিচে দেওয়া হলো:
১. যেকোনো ভালোভাবে লেখা স্ট্যান্ড-অ্যালোন পাইথন স্ক্রিপ্ট রান করলে (যা অন্য কোনো স্ক্রিপ্ট রেফার করে না), __name__ ভেরিয়েবলের ভ্যালু __main__-এর সমান হয়।
এই ফিচার বোঝাতে standalone.py নামে একটি প্রোগ্রাম লিখি।
def func1():
print('The value of __name__ is ' + __name__)
if __name__ == '__main__':
func1()আউটপুট:
The value of __name__ is __main__
আশা অনুযায়ী __name__ ভেরিয়েবল __main__ ইভ্যালুয়েট হয়েছে, তাই আউটপুট।
২. দ্বিতীয় ফিচার হলো একটি পাইথন স্ক্রিপ্ট অন্য স্ক্রিপ্টে ইমপোর্ট করা। এতে দুটি ভিন্ন স্কোপ মনে হয় যাকে main() ফাংশন বলা যেতে পারে। প্রথম স্কোপ হতে বর্তমানে রান হচ্ছে প্রোগ্রামের __main__ ভেরিয়েবল এবং দ্বিতীয় স্কোপ ইমপোর্ট করা স্ক্রিপ্টের __main__ ভেরিয়েবল।
তাহলে কোন __main__ ভেরিয়েবল ব্যবহার হবে?
যখন আপনি ইমপোর্ট করা স্ক্রিপ্ট থেকে একটি ফাংশন রান করাবেন, __name__ ভেরিয়েবল সেটি আসল স্ক্রিপ্টের নাম হবে, __main__ নয়।
কিন্তু যখন আপনি বর্তমান প্রোগ্রাম থেকে ইমপোর্ট করা স্ক্রিপ্ট রেফার না করে __name__ ভেরিয়েবলের ভ্যালু খুঁজবেন, সেটি __main__ হবে কারণ এটি লেভেল ০ ইনডেন্টেশনের প্রোগ্রাম স্কোপ।
নিচের প্রোগ্রামটি এই উদাহরণটি ইলাস্ট্রেট করে।
উদাহরণ
import standalone as sa
print('Running the imported script')
sa.func1()
print('\n')
print('Running the current script')
print('The value of __name__ is ' + __name__)আউটপুট
Running the imported script The value of __name__ is standalone Running the current script The value of __name__ is __main__
এই পদ্ধতির উপযোগিতা হলো if __name__ == "__main__": ব্যবহার করলে পাইথন ইন্টারপ্রেটার চেক করে এটি বর্তমান এক্সিকিউট হচ্ছে স্ক্রিপ্ট পার্স করছে নাকি অস্থায়ীভাবে অন্য এক্সটার্নাল স্ক্রিপ্ট পার্স করছে। এইভাবে প্রোগ্রামার কোডের বিভিন্ন অংশের বিহевиয়ার কন্ট্রোল করতে পারে এক্সটার্নাল স্ক্রিপ্ট থেকে লাইন রান করিয়ে এবং বর্তমান স্ক্রিপ্ট থেকে লাইন রান করিয়ে পরিস্থিতি অনুযায়ী।