> For the complete documentation index, see [llms.txt](https://python.howtocode.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://python.howtocode.dev/faq/whats-main.md).

# main

`if __name__ == "__main__":` এই লাইনটা অনেক পাইথন ফাইলে দেখে ঘাবড়ে যাবার কিছু নাই। আমরা বোঝার চেষ্টা করি কেন লোকজন এই অদ্ভুত if কন্ডিশনটাকে তাদের পাইথন স্ক্রিপ্টে লিখে। পাইথন ইন্টারপ্রেটার একটি প্রোগ্রামের এক্সিকিউশনের আগে যখন একটি সোর্স ফাইলকে পার্স (পড়ে) করে তখন সে এর জন্য কিছু স্পেশাল ভ্যারিয়েবল সেট করে। যখন স্বাধীনভাবে কোন পাইথন স্ক্রিপ্টকে রান করানো হয় তখন স্বয়ংক্রিয়ভাবে এর জন্য একটি `__name__` নামের ভ্যারিয়েবল তৈরি হয় যার ভ্যালু সেট করা হয় স্ট্রিং `"__main__"` . তাই আমরা যদি চাই আমাদের স্ক্রিপ্ট এর মধ্যেকার কিছু স্টেটমেন্ট শুধুমাত্র তখনি কাজ করুক যখন এটা একটা স্ট্যান্ডঅ্যালোণ স্ক্রিপ্ট হিসেবে রান করবে তখন বুদ্ধি করে এরকম একটা `if` কন্ডিশন লিখে তার মধ্যে ওগুলো লিখবো। কারন আমরা তো জানিই যে এই `if` কন্ডিশন তখনি সত্য হবে যখন এই স্ক্রিপ্টটা শুধু স্ক্রিপ্ট হিসেবেই রান হবে। যেমন আমাদের যদি নিচের মত একটা প্রোগ্রাম থাকে `Nuhil.py` ফাইলে,

```python
def my_module_func():
    print("Nuhil Mehdy")

if __name__ == "__main__":
    print("Nuhil")
```

তাহলে আমরা যখন `python Nuhil.py` এভাবে একে রান করাবো তখন আউটপুট আসবে,

`Nuhil`

কিন্তু যদি এই `Nuhil.py` কে আরেকটি পাইথন ফাইল যেমন `Mehdy.py` এর মধ্যে মডিউল হিসেবে `import` করি তখন কিন্তু পাইথন এই `Nuhil.py` ফাইল পার্স (পড়ার সময়) করার সময় `__name__` নামের ভ্যারিয়েবলের জন্য `"__main__"` ভ্যালু সেট করবে না। আর তাই `if` কন্ডিশনটা মিথ্যা হবে। তো, `Mehdy.py` এর কোড যদি হয় নিচের মত,

```python
import Nuhil
Nuhil.my_module_func()
```

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

```python
Nuhil Mehdy
```

এবং সুন্দর মত `print("Nuhil")` স্টেটমেন্টটি গোপনেই থেকে যাবে।
