Function কী ও কেন?
Function হলো একটি reusable code block যা একটি নির্দিষ্ট কাজ সম্পাদন করে। ফাংশন ব্যবহার করলে একই কোড বারবার লিখতে হয় না — এটি DRY (Don't Repeat Yourself) principle অনুসরণ করে।
ফাংশন ব্যবহারের সুবিধা
- Code Reusability — একবার লিখে বারবার ব্যবহার করা যায়
- Organization — বড় program-কে ছোট ছোট অংশে ভাগ করা যায়
- Readability — কোড পড়া ও বোঝা সহজ হয়
- Debugging — সমস্যা খুঁজে বের করা সহজ হয়
- Modularity — প্রতিটি ফাংশন স্বতন্ত্রভাবে পরীক্ষা করা যায়
Function তৈরি
Python-এ function তৈরি করতে def keyword ব্যবহার করা হয়। Function-এর নাম, parentheses () এবং colon : দিয়ে function header তৈরি হয়। Function body indented থাকে:
# সাধারণ function তৈরি
def greet():
print("আসসালামু আলাইকুম!")
print("Python শেখায় স্বাগতম!")
# Function call করা
greet()
# আসসালামু আলাইকুম!
# Python শেখায় স্বাগতম!
# Parameter সহ function
def greet_person(name):
print(f"হ্যালো, {name}! কেমন আছেন?")
greet_person("রহিম") # হ্যালো, রহিম! কেমন আছেন?
greet_person("সাদিয়া") # হ্যালো, সাদিয়া! কেমন আছেন?
- ছোট হাতের অক্ষর ব্যবহার করুন, শব্দ আলাদা করতে underscore:
calculate_total,get_name - Function-এর নাম verb (ক্রিয়া) দিয়ে শুরু করুন — কাজটা কী করে তা বোঝায়
- Python keyword (যেমন
print,list) function নাম হিসেবে ব্যবহার করবেন না
Parameters ও Arguments
Function definition-এ যেসব variable দেওয়া হয় সেগুলো parameter, আর function call-এ যে মান পাঠানো হয় তা argument।
| Parameter প্রকার | বিবরণ | উদাহরণ |
|---|---|---|
| Positional | অবস্থান অনুযায়ী মান পায় | def add(a, b) |
| Keyword | নাম দিয়ে মান পাঠানো | add(a=5, b=3) |
| Default | পূর্বনির্ধারিত মান থাকে | def greet(name="বন্ধু") |
| *args | যেকোনো সংখ্যক positional arg | def total(*nums) |
| **kwargs | যেকোনো সংখ্যক keyword arg | def info(**data) |
# Default parameter
def greet(name, greeting="আসসালামু আলাইকুম"):
print(f"{greeting}, {name}!")
greet("রহিম") # আসসালামু আলাইকুম, রহিম!
greet("করিম", "শুভ সকাল") # শুভ সকাল, করিম!
# *args — variable-length positional arguments
def total(*numbers):
return sum(numbers)
print(total(10, 20, 30)) # 60
print(total(5, 15)) # 20
# **kwargs — variable-length keyword arguments
def student_info(**data):
for key, value in data.items():
print(f"{key}: {value}")
student_info(name="সাদিয়া", dept="CSE", gpa=3.9)
# name: সাদিয়া
# dept: CSE
# gpa: 3.9
Return Values
return statement ব্যবহার করে function থেকে মান ফেরত পাঠানো হয়। return না থাকলে function None রিটার্ন করে।
# Single return value
def square(n):
return n ** 2
result = square(5)
print(result) # 25
# Multiple return values (tuple হিসেবে)
def min_max(numbers):
return min(numbers), max(numbers)
lowest, highest = min_max([3, 7, 1, 9, 4])
print(f"সর্বনিম্ন: {lowest}, সর্বোচ্চ: {highest}")
# সর্বনিম্ন: 1, সর্বোচ্চ: 9
# Early return — শর্ত পূরণ হলে আগেই ফেরত
def is_even(n):
if n % 2 == 0:
return True
return False
# return ছাড়া function
def say_hello():
print("Hello!")
x = say_hello() # Hello! প্রিন্ট করবে
print(x) # None
Scope ও Lifetime
Variable-এর scope নির্ধারণ করে কোথা থেকে সেটি অ্যাক্সেস করা যায়। Python LEGB rule অনুসরণ করে:
| Scope | পূর্ণরূপ | বিবরণ |
|---|---|---|
| L | Local | Function-এর ভেতরে তৈরি variable |
| E | Enclosing | Nested function-এর বাইরের function-এর variable |
| G | Global | Module/script level-এ তৈরি variable |
| B | Built-in | Python-এর built-in names (print, len, etc.) |
x = "global" # Global variable
def outer():
x = "enclosing" # Enclosing variable
def inner():
x = "local" # Local variable
print(x) # local
inner()
print(x) # enclosing
outer()
print(x) # global
# global keyword — function থেকে global variable পরিবর্তন
count = 0
def increment():
global count
count += 1
increment()
increment()
print(count) # 2
Local → Enclosing → Global → Built-in
মনে রাখুন: "Lunch Eat, Good Boy!" — Python এই ক্রমে variable খোঁজে। প্রথমে Local-এ, তারপর Enclosing, তারপর Global, সবশেষে Built-in-এ।
Lambda Functions
lambda হলো anonymous (নামহীন) function যা এক লাইনে লেখা যায়। ছোট, সহজ কাজের জন্য lambda ব্যবহৃত হয়:
# সাধারণ lambda
square = lambda x: x ** 2
print(square(5)) # 25
# দুটি parameter
add = lambda a, b: a + b
print(add(3, 7)) # 10
# map() — প্রতিটি element-এ function প্রয়োগ
numbers = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x**2, numbers))
print(squares) # [1, 4, 9, 16, 25]
# filter() — শর্ত পূরণকারী element বাছাই
nums = [1, 2, 3, 4, 5, 6, 7, 8]
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens) # [2, 4, 6, 8]
# sorted() — custom key দিয়ে sort
students = [("রহিম", 3.5), ("সাদিয়া", 3.9), ("করিম", 3.2)]
by_gpa = sorted(students, key=lambda s: s[1], reverse=True)
print(by_gpa)
# [('সাদিয়া', 3.9), ('রহিম', 3.5), ('করিম', 3.2)]
- lambda — ছোট, এক লাইনের expression;
map(),filter(),sorted()-এর key হিসেবে - def — জটিল logic, multiple statements, docstring দরকার হলে, বারবার ব্যবহার করলে
- Lambda-তে
if-elseexpression লেখা যায়, কিন্তুif-elif-elseবা loop লেখা যায় না