HomeCoursesPython
Chapter 9 of 14

ফাংশন

def, parameters, return values, scope & lambda functions

Function কী ও কেন?

Function হলো একটি reusable code block যা একটি নির্দিষ্ট কাজ সম্পাদন করে। ফাংশন ব্যবহার করলে একই কোড বারবার লিখতে হয় না — এটি DRY (Don't Repeat Yourself) principle অনুসরণ করে।

ফাংশন ব্যবহারের সুবিধা

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("সাদিয়া") # হ্যালো, সাদিয়া! কেমন আছেন?
🔑 Function নামকরণের নিয়ম
  • ছোট হাতের অক্ষর ব্যবহার করুন, শব্দ আলাদা করতে 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 argdef total(*nums)
**kwargsযেকোনো সংখ্যক keyword argdef 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পূর্ণরূপবিবরণ
LLocalFunction-এর ভেতরে তৈরি variable
EEnclosingNested function-এর বাইরের function-এর variable
GGlobalModule/script level-এ তৈরি variable
BBuilt-inPython-এর 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
💡 LEGB মনে রাখার কৌশল

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 vs def — কখন কোনটি?
  • lambda — ছোট, এক লাইনের expression; map(), filter(), sorted()-এর key হিসেবে
  • def — জটিল logic, multiple statements, docstring দরকার হলে, বারবার ব্যবহার করলে
  • Lambda-তে if-else expression লেখা যায়, কিন্তু if-elif-else বা loop লেখা যায় না
🧠 Quick Check
এই অধ্যায়ের উপর ৫টি প্রশ্নের উত্তর দিন
Q1. Python-এ function তৈরি করতে কোন keyword ব্যবহার করা হয়?
✅ সঠিক উত্তর: গ) def। Python-এ def keyword দিয়ে function সংজ্ঞায়িত করা হয়। function JavaScript-এ ব্যবহৃত হয়, Python-এ নয়।
Q2. def greet(name="বন্ধু"): return f"হ্যালো {name}"greet() call করলে output কী?
✅ সঠিক উত্তর: খ) হ্যালো বন্ধু। Argument না দিলে default parameter value "বন্ধু" ব্যবহৃত হয়। তাই output "হ্যালো বন্ধু"
Q3. *args parameter কী ধরনের data হিসেবে গ্রহণ করে?
✅ সঠিক উত্তর: গ) Tuple*args সব extra positional arguments গুলোকে একটি tuple-এ pack করে। আর **kwargs keyword arguments কে dictionary-তে pack করে।
Q4. LEGB rule-এ "E" এর অর্থ কী?
✅ সঠিক উত্তর: খ) Enclosing। LEGB = Local, Enclosing, Global, Built-in। Enclosing scope মানে nested function-এর বাইরের function-এর scope।
Q5. list(filter(lambda x: x > 3, [1,2,3,4,5])) এর output কী?
✅ সঠিক উত্তর: খ) [4, 5]filter() শুধু সেসব element রাখে যেখানে lambda True রিটার্ন করে। x > 3 শর্ত পূরণ করে 4 ও 5।
← Previous: ডিকশনারি ও সেট Next: স্ট্রিং মেথড →