Python বর্তমানে বিশ্বের অন্যতম জনপ্রিয় এবং বহুল ব্যবহৃত প্রোগ্রামিং ভাষা। এটি শেখা সহজ, কিন্তু এর ক্ষমতা অপরিসীম। ডেটা সায়েন্স থেকে শুরু করে ওয়েব ডেভেলপমেন্ট, মেশিন লার্নিং, অটোমেশন এবং স্ক্রিপ্টিং – সব জায়গায় Python এর জয়জয়কার। এই আর্টিকেলে আমরা Python এর বেসিক থেকে শুরু করে একেবারে অ্যাডভান্সড লেভেলের টপিকগুলো বিস্তারিতভাবে জানবো।
১. ভেরিয়েবল ও ডেটা টাইপ (Variables and Data Types)
Python একটি ডাইনামিকালি টাইপড (Dynamically Typed) ল্যাঙ্গুয়েজ, অর্থাৎ ভেরিয়েবল ডিক্লেয়ার করার সময় আপনাকে ডেটা টাইপ উল্লেখ করতে হবে না। Python রানটাইমে নিজে থেকেই ডেটা টাইপ বুঝে নেয়।
প্রধান ডেটা টাইপসমূহ:
- Integer (
int): পূর্ণসংখ্যা। যেমন:10,-5,0 - Float (
float): দশমিক সংখ্যা। যেমন:3.14,-0.5 - String (
str): টেক্সট বা স্ট্রিং। যেমন:"Hello World" - Boolean (
bool): সত্য বা মিথ্যা।TrueঅথবাFalse - List: পরিবর্তনযোগ্য (Mutable) ডেটার কালেকশন। যেমন:
[1, 2, 3] - Tuple: অপরিবর্তনযোগ্য (Immutable) ডেটার কালেকশন। যেমন:
(1, 2, 3) - Dictionary (
dict): Key-Value পেয়ার। যেমন:{'name': 'Rahim', 'age': 25} - Set: ইউনিক ভ্যালুর কালেকশন। যেমন:
{1, 2, 3}
উদাহরণ:
# ভেরিয়েবল ডিক্লেয়ারেশন
age = 25 # Integer
salary = 45000.50 # Float
name = "Ali Hasan" # String
is_developer = True # Boolean
# লিস্ট এবং ডিকশনারি
skills = ["Python", "Django", "Machine Learning"] # List
person_info = { # Dictionary
"name": "Ali Hasan",
"age": 25,
"role": "Software Engineer"
}
print(f"আমার নাম {name} এবং আমি একজন {person_info['role']}।")
২. কন্ট্রোল ফ্লো (Control Flow)
কন্ট্রোল ফ্লো দিয়ে প্রোগ্রামের লজিক বা ডিরেকশন নির্ধারণ করা হয়। প্রধানত শর্ত (Conditions) এবং লুপ (Loops) ব্যবহার করে এটি করা হয়।
কন্ডিশনাল স্টেটমেন্ট (if-elif-else):
শর্তের উপর ভিত্তি করে নির্দিষ্ট কোড ব্লক রান করতে if, elif এবং else ব্যবহার করা হয়।
marks = 85
if marks >= 80:
print("আপনি A+ পেয়েছেন!")
elif marks >= 70:
print("আপনি A পেয়েছেন!")
elif marks >= 60:
print("আপনি A- পেয়েছেন!")
else:
print("আপনাকে আরও পড়াশোনা করতে হবে।")
লুপ (Loops):
Python এ প্রধানত দুই ধরনের লুপ ব্যবহৃত হয়: for লুপ এবং while লুপ।
For Loop:
# লিস্টের ওপর ইটারেট করা
fruits = ["Apple", "Banana", "Cherry"]
for fruit in fruits:
print(fruit)
# রেঞ্জ (range) ব্যবহার করা
for i in range(1, 6): # ১ থেকে ৫ পর্যন্ত প্রিন্ট করবে
print(i)
While Loop:
count = 5
while count > 0:
print(count)
count -= 1 # count এর মান ১ করে কমাচ্ছি
print("Blastoff!")
৩. ফাংশন (Functions)
ফাংশন হলো কোডের একটি পুনরায় ব্যবহারযোগ্য (Reusable) ব্লক, যা নির্দিষ্ট একটি কাজ করে। Python এ ফাংশন তৈরি করতে def কীওয়ার্ড ব্যবহার করা হয়।
# একটি সাধারণ ফাংশন
def greet(user_name):
"""এটি একটি গ্রিটিং ফাংশন"""
return f"Hello, {user_name}! Welcome to Python world."
print(greet("Rahim"))
# ডিফল্ট প্যারামিটার সহ ফাংশন
def add_numbers(a, b=10):
return a + b
print(add_numbers(5)) # আউটপুট: 15 (5 + 10)
print(add_numbers(5, 20)) # আউটপুট: 25 (5 + 20)
৪. ল্যাম্বডা ফাংশন (Lambda Functions)
ল্যাম্বডা ফাংশন হলো ছোট, নামবিহীন (Anonymous) ফাংশন। এটি শুধুমাত্র একটি লাইনে লেখা যায়। সাধারণত যেখানে ছোট ফাংশনের দরকার হয়, যেমন map(), filter() এর ভেতরে, সেখানে ল্যাম্বডা ব্যবহার করা হয়।
# সাধারণ ফাংশন
def square(x):
return x * x
# ল্যাম্বডা ফাংশন
square_lambda = lambda x: x * x
print(square_lambda(5)) # আউটপুট: 25
# map এর সাথে ব্যবহার
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x**2, numbers))
print(squared_numbers) # আউটপুট: [1, 4, 9, 16, 25]
৫. লিস্ট কমপ্রিহেনশন (List Comprehensions)
লিস্ট কমপ্রিহেনশন হলো খুব সহজে এবং এক লাইনে লিস্ট তৈরি করার একটি অসাধারণ উপায়। এটি কোডকে ছোট এবং দ্রুত করে তোলে।
সাধারণ নিয়মে লিস্ট তৈরি:
squares = []
for x in range(10):
squares.append(x**2)
লিস্ট কমপ্রিহেনশন দিয়ে:
squares = [x**2 for x in range(10)]
print(squares)
# শর্ত (if) ব্যবহার করে
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares) # আউটপুট: [0, 4, 16, 36, 64]
৬. জেনারেটর (Generators)
জেনারেটর সাধারণ ফাংশনের মতোই, তবে এটি return এর বদলে yield কীওয়ার্ড ব্যবহার করে। জেনারেটর একসঙ্গে সব ডেটা মেমোরিতে লোড করে না, বরং যখন দরকার হয় তখন একটা একটা করে ডেটা দেয়। এটি বড় ডেটাসেট নিয়ে কাজ করার সময় প্রচুর মেমোরি বাঁচায়।
def fibonacci_generator(limit):
a, b = 0, 1
while a < limit:
yield a
a, b = b, a + b
# জেনারেটর ব্যবহার
fib = fibonacci_generator(50)
for num in fib:
print(num, end=" ")
# আউটপুট: 0 1 1 2 3 5 8 13 21 34
খেয়াল করুন, এখানে সব ফিবোনাচি নম্বর একসঙ্গে লিস্টে জমা হচ্ছোসহ, জেনারেট হচ্ছে।
৭. ডেকোরেটর (Decorators)
ডেকোরেটর হলো এমন একটি ফাংশন যা অন্য একটি ফাংশনকে আর্গুমেন্ট হিসেবে নেয় এবং সেই ফাংশনের কার্যকারিতা পরিবর্তন বা বৃদ্ধি করে। মূলত, আসল ফাংশনের সোর্স কোড পরিবর্তন না করেই নতুন ফিচার যোগ করার জন্য ডেকোরেটর ব্যবহার করা হয়।
def my_decorator(func):
def wrapper():
print("--- ফাংশন কল হওয়ার আগে কিছু কাজ ---")
func()
print("--- ফাংশন কল হওয়ার পরে কিছু কাজ ---")
return wrapper
@my_decorator
def say_hello():
print("Hello! I am learning Decorators.")
say_hello()
আউটপুট:
--- ফাংশন কল হওয়ার আগে কিছু কাজ ---
Hello! I am learning Decorators.
--- ফাংশন কল হওয়ার পরে কিছু কাজ ---
৮. অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP)
Python একটি পূর্ণাঙ্গ অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) ল্যাঙ্গুয়েজ। OOP এর মূল ভিত্তি হলো ক্লাস (Class) এবং অবজেক্ট (Object)।
- Class: এটি একটি ব্লুপ্রিন্ট বা নকশা।
- Object: এটি ক্লাসের একটি বাস্তব রূপ বা ইন্সট্যান্স।
class Car:
# Constructor বা ইনিশিয়ালাইজার
def __init__(self, brand, model, year):
self.brand = brand
self.model = model
self.year = year
self.is_running = False
# মেথড (Method)
def start_engine(self):
self.is_running = True
return f"{self.brand} {self.model} এর ইঞ্জিন চালু হয়েছে।"
def stop_engine(self):
self.is_running = False
return f"{self.brand} {self.model} এর ইঞ্জিন বন্ধ হয়েছে।"
# অবজেক্ট তৈরি
my_car = Car("Toyota", "Corolla", 2022)
print(my_car.start_engine())
print(f"গাড়ির বয়স: {2026 - my_car.year} বছর")
৯. ডান্ডার মেথড বা ম্যাজিক মেথড (Dunder Methods)
Python এর ক্লাসে কিছু বিশেষ মেথড থাকে যাদের আগে ও পরে ডাবল আন্ডারস্কোর (Double Underscore বা Dunder) থাকে। যেমন __init__, __str__, __len__, ইত্যাদি। এগুলো ক্লাসকে বিল্ট-ইন ফাংশনের সাথে ইন্টার্যাক্ট করতে সাহায্য করে।
class Book:
def __init__(self, title, author, pages):
self.title = title
self.author = author
self.pages = pages
# অবজেক্টকে স্ট্রিং হিসেবে প্রিন্ট করলে কী দেখাবে
def __str__(self):
return f"'{self.title}' by {self.author}"
# len() ফাংশন কল করলে কী রিটার্ন করবে
def __len__(self):
return self.pages
my_book = Book("Python Crash Course", "Eric Matthes", 544)
print(my_book) # আউটপুট: 'Python Crash Course' by Eric Matthes
print(len(my_book)) # আউটপুট: 544
১০. মাল্টি-থ্রেডিং বেসিকস (Multi-threading Basics)
সাধারণত Python কোড লাইন বাই লাইন (Synchronous) এক্সিকিউট হয়। কিন্তু আমরা চাইলে threading মডিউল ব্যবহার করে একসঙ্গে একাধিক কাজ (Asynchronous) সমান্তরালভাবে চালাতে পারি। এটি I/O bound কাজের (যেমন নেটওয়ার্ক রিকোয়েস্ট, ফাইল রিড/রাইট) জন্য খুব কার্যকরী।
import threading
import time
def print_numbers():
for i in range(1, 6):
print(f"Number: {i}")
time.sleep(1) # ১ সেকেন্ড অপেক্ষা করবে
def print_letters():
for letter in ['A', 'B', 'C', 'D', 'E']:
print(f"Letter: {letter}")
time.sleep(1) # ১ সেকেন্ড অপেক্ষা করবে
# থ্রেড তৈরি
thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_letters)
# থ্রেড চালু করা
start_time = time.time()
thread1.start()
thread2.start()
# মেইন প্রোগ্রামকে অপেক্ষা করানো থ্রেড শেষ হওয়া পর্যন্ত
thread1.join()
thread2.join()
end_time = time.time()
print(f"মোট সময় লেগেছে: {round(end_time - start_time, 2)} সেকেন্ড")
এখানে থ্রেড ব্যবহার না করলে কোডটি শেষ হতে ১০ সেকেন্ড সময় লাগত, কিন্তু মাল্টি-থ্রেডিং এর কারণে এটি প্রায় ৫ সেকেন্ডেই শেষ হয়ে যাবে, কারণ কাজগুলো সমান্তরালভাবে হচ্ছে।
উপসংহার
Python এর যাত্রা print("Hello World") দিয়ে শুরু হলেও এর শেষ নেই। ডেকোরেটর, জেনারেটর, OOP এবং মাল্টি-থ্রেডিং এর মত কনসেপ্টগুলো আপনার কোডকে করবে আরও বেশি প্রফেশনাল, অপ্টিমাইজড এবং স্কেলেবল। এগুলো ভালোভাবে আয়ত্ত করতে পারলে আপনি Python ডেভেলপার হিসেবে অনেক দূর এগিয়ে যাবেন।
হ্যাপি কোডিং!