পাইথনে

if __name == "__main__":

এর কাজ কী এবং কেন ব্যবহার করতে হয়? ব্যবহার না করলেও তো দেখার মত কোন সমস্যা হচ্ছে না।

asked 26 May, 09:15

shuvo13's gravatar image

shuvo13
314

edited 26 May, 16:50

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
30618


যখন কোন একটা পাইথন ফাইল (বা স্ক্রিপ্ট) পাইথন ইন্টারপ্রেটার দিয়ে চালানো হয় তখন ইন্টারপ্রেটার __name__ ভ্যারিয়েবলের মান __main__ সেট করে। অন্যদিকে যখন একটা পাইথন ফাইলকে মডিউল হিসেবে অন্য ফাইলে ইমপোর্ট করা হয় তখন সেই ফাইলের (বা মডিউলের) __name__ ভ্যারিয়েবলের মান ঐ মডিউলের নামে সেট করে।

যেমন ধরা যাক আমার একটা পাইথন ফাইলের নাম main.py এবং এর কনটেন্ট হলো:

if __name__ == "__main__":
    print("hello, world")

এখন আমি যদি একে পাইথন ইন্টারপ্রেটার দিয়ে চালাই:

$ python main.py

তাহলে এর আউটপুট আসবে:

hello, world

যেহেতু আমি একে সরাসরি পাইথন ইন্টারপ্রেটার দিয়ে চালিয়েছি, মডিউল হিসেবে ইমপোর্ট করিনি তাই __name__ এর ভ্যালু __main__ হিসেবে সেট হয়েছে এবং কোডটুকু রান করেছে।

এখন আরেকটি পাইথন ফাইলের কথা চিন্তা করা যাক module.py। এর কনটেন্ট হল:

def print_pi():
    print("3.1416")

def print_e():
    print("2.7182")

if __name__ == "__main__":
    print_pi()
    print_e()

একে যদি আমি পাইথন ইন্টারপ্রেটার দিয়ে রান করি:

$ python module.py

তাহলে আউটপুট আসবে:

3.1416
2.7182

main.py এর মত একই কারণে এর if __name__ == "__main__:" অংশের কোডটুকু রান করবে। কিন্তু আমি যদি module.py একটা মডিউল হিসেবে main.py তে ইমপোর্ট করে এর ফাংশন ব্যবহার করি তখন কিন্তু module.py এর if __name__ == "__main__:" অংশের কোডটুকু রান করবে না। main.py কে পরিবর্তন করে লিখলাম:

import module            # imported module.py

if __name__ == "__main__":
    print("hello, world")
    module.print_pi()

এখন একে যদি পাইথন ইনটারপ্রেটার দিয়ে চালাই:

$ python main.py

তাহলে আউটপুট আসবে:

hello, world
3.1416

খেয়াল করলে দেখা যাবে এক্ষেত্রে মডিউল ইমপোর্ট করার সময় কিন্তু if __name__ == "__main__:" অংশের কোডটুকু রান করেনি।

এই কাজটা করা হয় মূলত যখন একটি মডিউল বানানো হয় তখন এর ফাংশনগুলো টেস্ট করার জন্য। পরে যখন ঐ মডিউলকে ইমপোর্ট করে অন্য ফাইলে ব্যবহার করা হয় তখন যাতে টেস্টিং কোডগুলো রান না করে।

permanent link

answered 26 May, 18:01

Ashfaqur%20Rahman's gravatar image

Ashfaqur Rahman
7599

edited 27 May, 04:44

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
30618

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×26

question asked: 26 May, 09:15

question was seen: 134 times

last updated: 27 May, 04:44