> 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/function-and-module/module.md).

# মডিউল

মডিউল হচ্ছে কিছু কোডের সমষ্টি যেখানে বেশ কিছু ফাংশন, ভ্যারিয়েবল বা ডাটা থাকে এবং যেগুলোকে অ্যাক্সেস করে প্রয়োজনে আরেকটি পাইথন প্রোগ্রামে ব্যবহার করা যায়। পাইথনের অনেক অনেক বিল্ট-ইন মডিউল আছে যেগুলোতে অনেক অনেক প্রয়োজনীয় ফাংশন যুক্ত করাই আছে। নিজেদের জন্য কোন প্রোগ্রাম লেখার সময় চাইলে সেই মডিউল গুলো থেকে উক্ত ফিচার গুলো ব্যবহার করা যায়।

নতুন একটি প্রোগ্রামে এরকম কোন মডিউল ব্যবহার করতে চাইলে প্রথমেই সেটিকে import করে নিতে হবে। `import MODULE_NAME` এভাবে। এবার এই স্টেটমেন্টের নিচে `MODULE_NAME.VAR` এভাবে উক্ত মডিউলের ফাংশন বা ভ্যারিয়েবলকে অ্যাক্সেস করা যাবে। একটি উদাহরণ দেখি -

```python
import random

value = random.randint(1, 100)
print(value)
```

উপরের প্রোগ্রামে `value` নামের ভ্যারিয়েবলে আমরা একটি র‍্যান্ডম নাম্বার ষ্টোর করতে চেয়েছি। যে র‍্যান্ডম নাম্বারটি হবে ১ থেকে ১০০ এর মধ্যে। কিন্তু আমরা নিজেরা সেই র‍্যান্ডম নাম্বার তৈরির ফাংশন লিখি নাই। বরং আমরা পাইথনের একটি বিল্ট ইন মডিউল `random` কে ইম্পোর্ট করে নিয়েছি এবং এর মধ্যে আগেই ডিফাইন করে রাখা `randint` ফাংশনকে ব্যবহার করে র‍্যান্ডম নাম্বার পাচ্ছি। এ প্রোগ্রামের আউটপুট এক এক বার এক এক রকম আসবে কিন্তু অবশ্যই এমন একটি ভ্যালু প্রিন্ট হবে যার মান ১ থেকে ১০০ এর মধ্যে।

আরও একভাবে মডিউল ইম্পোর্ট এর কাজ করা যায়। যদি আমাদের কোন একটি মডিউলের নির্দিষ্ট কিছু জিনিষ দরকার হয় তাহলে শুধুমাত্র সেগুলোকে ইম্পোর্ট করা যায়। যেমন নিচের উদাহরণটি -

```python
from math import pi, sqrt

print(pi)
print(sqrt(25))
```

আউটপুট,

```python
3.141592653589793
5.0
```

উপরের উদাহরণে আমরা `math` মডিউল থেকে শুধুমাত্র `pi` কন্সট্যান্টটি এবং `sqrt` ফাংশনটিকে ইম্পোর্ট করেছি। আর তাই, এই দুটোকে আমরা ব্যবহার করতে পারছি আমাদের প্রোগ্রামে। এখন ধরুন `sqrt` নামটা আপনার পছন্দ হচ্ছে না। আপনি চাচ্ছেন square root বের করার ফাংশনের নাম আরেকটু সুন্দর হলে ভালো হয়। সেটাও করতে পারেন নিচের মত করে -

```python
from math import sqrt as square_root

print(square_root(25))
```

আউটপুট,

```python
5.0
```

> কোন একটি মডিউলের সব গুলো অবজেক্ট তথা ফাংশন, ভ্যারিয়েবল, কন্সট্যান্টকে ইম্পোর্ট করার জন্য অনেকেই `from MODULE_NAME import *` ব্যবহার করে থাকেন। এটি একদমই উচিৎ নয়। কারণ এতে করে আপনার কোডের মধ্যে ব্যবহৃত কোন ফাংশন বা ভ্যারিয়েবলের নাম মডিউল থেকে পাওয়া নাকি নিজের তৈরি সেটা নিজেরই বুঝতে সমস্যা হতে পারে।
