Table of Contents

    Class - XII: SEMESTER – III: Unit – 1: Python Programming: Section 14: Functions

    Python Programming: Functions

    ১. Function কী?

    Python programming language-এ Function হলো একটি reusable block of code, যা একটি নির্দিষ্ট কাজ সম্পন্ন করার জন্য লেখা হয়। সহজভাবে বললে, function হলো এমন একটি code block যাকে একবার define করা যায় এবং প্রয়োজন হলে বারবার call করে ব্যবহার করা যায়।

    Function programming-এর একটি অত্যন্ত গুরুত্বপূর্ণ concept, কারণ এটি code-কে ছোট, organized, readable এবং reusable করে। যদি কোনো program-এ একই কাজ বারবার করতে হয়, তাহলে সেই code বারবার না লিখে function তৈরি করে নেওয়া ভালো। এরপর যেখানে দরকার সেখানে function call করলেই কাজটি সম্পন্ন হবে।

    বাস্তব জীবনের উদাহরণ হিসেবে ভাবুন, একটি calculator-এর মধ্যে addition, subtraction, multiplication এবং division-এর আলাদা আলাদা button থাকে। প্রতিটি button একটি নির্দিষ্ট কাজ করে। Programming-এ function-ও ঠিক একইভাবে নির্দিষ্ট কাজ সম্পন্ন করে।

    Function ব্যবহারের সুবিধা:

    • Code reuse করা যায়।
    • Program ছোট এবং পরিষ্কার হয়।
    • Complex problem ছোট ছোট parts-এ ভাগ করা যায়।
    • Debugging সহজ হয়।
    • Code maintain করা সহজ হয়।
    • একই কাজ বারবার লেখার দরকার হয় না।

    ২. Python-এ Function-এর ধরন

    Python-এ functions সাধারণত তিন ধরনের হতে পারে:

    • Built-in Functions
    • Functions defined in Module
    • User Defined Functions

    এই তিন ধরনের function Python programming-এ খুব বেশি ব্যবহৃত হয়। Built-in functions Python-এর সাথে আগে থেকেই থাকে, module functions কোনো module import করে ব্যবহার করতে হয়, আর user defined functions programmer নিজে তৈরি করে।

    ৩. Built-in Functions

    Built-in functions হলো Python-এর সাথে আগে থেকেই provided functions। এগুলো ব্যবহার করার জন্য কোনো module import করার দরকার হয় না। Python install করলেই এগুলো সরাসরি ব্যবহার করা যায়।

    যেমন print(), input(), len(), type(), int(), float(), str(), max(), min(), sum() ইত্যাদি built-in functions।

    Example:

    numbers = [10, 20, 30, 40]
    
    print("Length:", len(numbers))
    print("Maximum:", max(numbers))
    print("Minimum:", min(numbers))
    print("Sum:", sum(numbers))

    Output:

    Length: 4
    Maximum: 40
    Minimum: 10
    Sum: 100

    এখানে len(), max(), min(), এবং sum() built-in functions ব্যবহার করা হয়েছে।

    ৪. Functions Defined in Module

    Python-এর অনেক functions বিভিন্ন modules-এর ভিতরে থাকে। এই functions ব্যবহার করতে হলে প্রথমে সংশ্লিষ্ট module import করতে হয়। উদাহরণস্বরূপ, math module-এর মধ্যে sqrt(), ceil(), floor() ইত্যাদি functions আছে। আবার random module-এর মধ্যে randint(), random() ইত্যাদি functions আছে।

    Example using math module:

    import math
    
    print(math.sqrt(25))
    print(math.ceil(4.3))
    print(math.floor(4.9))

    Output:

    5.0
    5
    4

    এখানে math module import করার পরে module-এর functions ব্যবহার করা হয়েছে। যখন আমরা import math লিখি, তখন function call করার সময় math. prefix ব্যবহার করতে হয়।

    Example using from statement:

    from math import sqrt, pow
    
    print(sqrt(64))
    print(pow(2, 3))

    Output:

    8.0
    8.0

    এখানে sqrt এবং pow directly import করা হয়েছে, তাই math.sqrt() না লিখে সরাসরি sqrt() লেখা হয়েছে।

    ৫. User Defined Function

    User defined function হলো সেই function যা programmer নিজে তৈরি করে। যখন কোনো specific কাজের জন্য built-in বা module function যথেষ্ট নয়, বা program-এর কোনো অংশ বারবার ব্যবহার করতে হয়, তখন user defined function তৈরি করা হয়।

    Python-এ user defined function তৈরি করার জন্য def keyword ব্যবহার করা হয়। Function-এর নামের পরে parentheses () এবং colon : দিতে হয়। Function body indentation দিয়ে লিখতে হয়।

    Syntax:

    def function_name():
        statement_1
        statement_2

    Example:

    def greet():
        print("Hello, welcome to Python!")
    
    greet()

    Output:

    Hello, welcome to Python!

    এখানে greet() একটি user defined function। প্রথমে function define করা হয়েছে, তারপর function call করা হয়েছে।

    Important: Function define করলে function body automatically execute হয় না। Function execute করার জন্য function call করতে হয়।

    ৬. Function Call কী?

    Function তৈরি করার পর সেটি চালানোর জন্য function name লিখে parentheses ব্যবহার করতে হয়। এটিকে function call বলা হয়।

    Example:

    def show_message():
        print("This is a function call example")
    
    show_message()

    এখানে show_message() লিখে function call করা হয়েছে। Function call না করলে function-এর ভিতরের code execute হবে না।

    Function একাধিকবার call করা:

    def line():
        print("--------------------")
    
    line()
    print("Student Report")
    line()
    print("End of Report")
    line()

    এখানে একই function বারবার call করা হয়েছে। ফলে একই code বারবার না লিখেও একই output পাওয়া যাচ্ছে।

    ৭. Arguments এবং Parameters

    Function-এর সাথে value পাঠানোর জন্য arguments এবং parameters ব্যবহার করা হয়। Function definition-এর parentheses-এর মধ্যে যে variable লেখা হয় তাকে parameter বলা হয়। Function call করার সময় যে actual value পাঠানো হয় তাকে argument বলা হয়।

    Example:

    def greet(name):
        print("Hello", name)
    
    greet("Rahim")

    Output:

    Hello Rahim

    এখানে name হলো parameter, আর "Rahim" হলো argument। Function call করার সময় argument parameter-এর মধ্যে store হয়।

    Multiple Parameters:

    def add(a, b):
        result = a + b
        print("Sum:", result)
    
    add(10, 20)

    Output:

    Sum: 30

    ৮. Arguments এবং Parameters-এর পার্থক্য

    বিষয় Parameter Argument
    অর্থ Function definition-এর variable Function call করার সময় পাঠানো actual value
    কোথায় থাকে Function define করার সময় Function call করার সময়
    Example def greet(name): greet("Rahim")
    Role Value receive করে Value send করে

    ৯. Positional Parameters

    Positional parameters হলো এমন parameters যেখানে function call করার সময় arguments-এর position বা order অনুযায়ী value assign হয়। অর্থাৎ, প্রথম argument প্রথম parameter-এ যায়, দ্বিতীয় argument দ্বিতীয় parameter-এ যায়।

    Example:

    def student_info(name, age, marks):
        print("Name:", name)
        print("Age:", age)
        print("Marks:", marks)
    
    student_info("Rahim", 20, 85)

    Output:

    Name: Rahim
    Age: 20
    Marks: 85

    এখানে "Rahim" name parameter-এ, 20 age parameter-এ এবং 85 marks parameter-এ গেছে।

    Order ভুল হলে problem:

    def student_info(name, age):
        print("Name:", name)
        print("Age:", age)
    
    student_info(20, "Rahim")

    এখানে output logically ভুল হবে, কারণ arguments-এর order ভুল। তাই positional arguments ব্যবহার করার সময় order খুব গুরুত্বপূর্ণ।

    ১০. Default Parameters

    Default parameter হলো এমন parameter যার একটি default value function definition-এর সময়ই দেওয়া থাকে। Function call করার সময় যদি ওই parameter-এর জন্য argument না পাঠানো হয়, তাহলে default value ব্যবহার হয়।

    Example:

    def greet(name="Guest"):
        print("Hello", name)
    
    greet()
    greet("Karim")

    Output:

    Hello Guest
    Hello Karim

    প্রথম function call-এ কোনো argument পাঠানো হয়নি, তাই default value "Guest" ব্যবহার হয়েছে। দ্বিতীয় call-এ "Karim" পাঠানো হয়েছে, তাই default value replace হয়েছে।

    Example with multiple parameters:

    def calculate_price(price, discount=0):
        final_price = price - discount
        print("Final price:", final_price)
    
    calculate_price(1000)
    calculate_price(1000, 100)

    Output:

    Final price: 1000
    Final price: 900
    Important: Python-এ non-default parameter সবসময় default parameter-এর আগে লিখতে হয়।

    Wrong Example:

    def show(country="India", name):
        print(name, country)

    এটি SyntaxError দেবে, কারণ default parameter-এর পরে non-default parameter রাখা হয়েছে।

    Correct Example:

    def show(name, country="India"):
        print(name, country)
    
    show("Rahim")

    ১১. Function Returning Value(s)

    Function শুধু output print করতেই ব্যবহার হয় না; function কোনো value calculate করে caller-এর কাছে return-ও করতে পারে। Python-এ function থেকে value return করার জন্য return statement ব্যবহার করা হয়।

    Syntax:

    def function_name():
        return value

    Example: Returning single value

    def add(a, b):
        return a + b
    
    result = add(10, 20)
    
    print("Sum:", result)

    Output:

    Sum: 30

    এখানে add() function result calculate করে return করেছে। Return করা value result variable-এ store হয়েছে।

    Returning multiple values:

    def calculate(a, b):
        total = a + b
        difference = a - b
        product = a * b
        return total, difference, product
    
    s, d, p = calculate(10, 5)
    
    print("Sum:", s)
    print("Difference:", d)
    print("Product:", p)

    Output:

    Sum: 15
    Difference: 5
    Product: 50

    Python function multiple values return করতে পারে। আসলে Python multiple values tuple আকারে return করে, এবং আমরা tuple unpacking ব্যবহার করে values আলাদা variable-এ রাখতে পারি।

    Important: return statement execute হওয়ার পর function সঙ্গে সঙ্গে শেষ হয়ে যায়। Return-এর পরে function-এর ভিতরে থাকা code execute হয় না।

    Example:

    def test():
        return "Done"
        print("This line will not execute")
    
    print(test())

    ১২. print() এবং return-এর পার্থক্য

    Beginner programmers অনেক সময় print() এবং return confuse করে। print() screen-এ output দেখায়, কিন্তু value future calculation-এর জন্য caller-এর কাছে পাঠায় না। অন্যদিকে return value function-এর বাইরে পাঠায়, যা variable-এ store করে পরবর্তী calculation-এ ব্যবহার করা যায়।

    বিষয় print() return
    কাজ Screen-এ output দেখায় Function থেকে value ফেরত পাঠায়
    Value reuse সরাসরি reuse করা যায় না Variable-এ store করে reuse করা যায়
    Use case User-কে result দেখানোর জন্য Calculation result program-এর অন্য অংশে ব্যবহার করার জন্য

    Example:

    def add_print(a, b):
        print(a + b)
    
    def add_return(a, b):
        return a + b
    
    add_print(10, 20)
    
    result = add_return(10, 20)
    print(result * 2)

    এখানে add_return() থেকে returned value পরবর্তী calculation-এ ব্যবহার করা হয়েছে।

    ১৩. Flow of Execution in Functions

    Function-এর ক্ষেত্রে program execution সবসময় উপরের line থেকে নিচে চলে, কিন্তু function call হলে execution temporarily function-এর ভিতরে চলে যায়। Function body execute হওয়ার পর execution আবার function call-এর পরের line-এ ফিরে আসে।

    Example:

    def greet():
        print("Inside function")
    
    print("Program starts")
    
    greet()
    
    print("Program ends")

    Output:

    Program starts
    Inside function
    Program ends

    Execution Steps:

    1. Python প্রথমে function definition read করে, কিন্তু execute করে না।
    2. print("Program starts") execute হয়।
    3. greet() function call হয়।
    4. Execution function body-এর ভিতরে যায় এবং Inside function print হয়।
    5. Function শেষ হলে execution আবার function call-এর পরের line-এ ফিরে আসে।
    6. Program ends print হয়।
    Note: Function definition program-এর শুরুতে থাকলেও body execute হয় শুধু function call হলে।

    ১৪. Scope of a Variable

    Programming-এ scope বলতে বোঝায় একটি variable program-এর কোন অংশে accessible বা usable। Python-এ variable কোথায় declare করা হয়েছে তার উপর নির্ভর করে তার scope নির্ধারিত হয়।

    এই topic-এ আমরা দুই ধরনের scope শিখব:

    • Global Scope
    • Local Scope

    ১৫. Global Scope

    Function-এর বাইরে যে variable তৈরি করা হয়, তাকে global variable বলা হয়। Global variable program-এর যেকোনো function-এর ভিতরে read করা যায়।

    Example:

    message = "Hello from global scope"
    
    def show_message():
        print(message)
    
    show_message()

    Output:

    Hello from global scope

    এখানে message function-এর বাইরে define করা হয়েছে, তাই এটি global variable। Function-এর ভিতরে এটি read করা গেছে।

    Global variable modify করতে চাইলে:

    count = 0
    
    def increase():
        global count
        count = count + 1
    
    increase()
    increase()
    
    print(count)

    Output:

    2

    Function-এর ভিতরে global variable modify করতে হলে global keyword ব্যবহার করতে হয়।

    Good Practice: খুব বেশি global variable ব্যবহার করা ভালো নয়, কারণ এতে program বুঝতে ও debug করতে কঠিন হতে পারে।

    ১৬. Local Scope

    Function-এর ভিতরে যে variable তৈরি করা হয়, তাকে local variable বলা হয়। Local variable শুধুমাত্র সেই function-এর ভিতরেই accessible। Function-এর বাইরে এটি ব্যবহার করা যায় না।

    Example:

    def show():
        name = "Rahim"
        print(name)
    
    show()
    
    # print(name)  # এটি error দেবে

    এখানে name variable function-এর ভিতরে তৈরি হয়েছে, তাই এটি local variable। Function-এর বাইরে name access করলে NameError হবে।

    Same name local and global variable:

    name = "Global Rahim"
    
    def show():
        name = "Local Karim"
        print("Inside function:", name)
    
    show()
    
    print("Outside function:", name)

    Output:

    Inside function: Local Karim
    Outside function: Global Rahim

    এখানে function-এর ভিতরের name local variable এবং function-এর বাইরের name global variable। দুটো আলাদা variable হিসেবে কাজ করছে।

    ১৭. Global Scope এবং Local Scope-এর পার্থক্য

    বিষয় Global Scope Local Scope
    Variable কোথায় তৈরি হয় Function-এর বাইরে Function-এর ভিতরে
    Access Program-এর বিভিন্ন অংশে access করা যায় শুধু সেই function-এর ভিতরে access করা যায়
    Lifetime Program চলা পর্যন্ত থাকে Function execution শেষ হলে সাধারণত শেষ হয়
    Modify করতে Function-এর ভিতরে modify করতে global দরকার Function-এর ভিতরে সরাসরি modify করা যায়
    Example x = 10 outside function x = 10 inside function

    ১৮. Function with Input, Processing and Return

    Practical program-এ function সাধারণত input receive করে, processing করে এবং result return করে। এই approach program-কে modular করে তোলে।

    Example: Area of Rectangle

    def rectangle_area(length, width):
        area = length * width
        return area
    
    l = float(input("Length লিখুন: "))
    w = float(input("Width লিখুন: "))
    
    result = rectangle_area(l, w)
    
    print("Area of rectangle:", result)

    Explanation:

    1. rectangle_area() function দুইটি parameter receive করছে।
    2. Function-এর ভিতরে length এবং width multiply করে area calculate করা হচ্ছে।
    3. Calculated area return করা হচ্ছে।
    4. Returned value result variable-এ store হচ্ছে।
    5. শেষে result print করা হচ্ছে।

    ১৯. Suggested Program ১: Maximum of Two Numbers using Function

    এই program user defined function ব্যবহার করে দুইটি number-এর মধ্যে maximum value বের করে।

    def find_max(a, b):
        if a > b:
            return a
        else:
            return b
    
    num1 = int(input("প্রথম সংখ্যা লিখুন: "))
    num2 = int(input("দ্বিতীয় সংখ্যা লিখুন: "))
    
    maximum = find_max(num1, num2)
    
    print("Maximum number:", maximum)

    এখানে function দুইটি argument receive করে এবং condition ব্যবহার করে বড় value return করে।

    ২০. Suggested Program ২: Factorial using Function

    Factorial হলো 1 থেকে n পর্যন্ত সব positive integer-এর multiplication। User defined function ব্যবহার করে factorial program সহজে লেখা যায়।

    def factorial(n):
        fact = 1
    
        for i in range(1, n + 1):
            fact = fact * i
    
        return fact
    
    number = int(input("একটি positive number লিখুন: "))
    
    if number < 0:
        print("Negative number-এর factorial হয় না")
    else:
        result = factorial(number)
        print(number, "এর factorial:", result)

    এখানে factorial() function calculation করে result return করছে।

    ২১. Suggested Program ৩: Simple Calculator using Functions

    Calculator program function শেখার জন্য খুব ভালো example, কারণ এখানে প্রতিটি operation আলাদা function হিসেবে লেখা যায়।

    def add(a, b):
        return a + b
    
    def subtract(a, b):
        return a - b
    
    def multiply(a, b):
        return a * b
    
    def divide(a, b):
        if b == 0:
            return "Zero দিয়ে ভাগ করা যায় না"
        else:
            return a / b
    
    num1 = float(input("প্রথম সংখ্যা লিখুন: "))
    num2 = float(input("দ্বিতীয় সংখ্যা লিখুন: "))
    
    print("Addition:", add(num1, num2))
    print("Subtraction:", subtract(num1, num2))
    print("Multiplication:", multiply(num1, num2))
    print("Division:", divide(num1, num2))

    Explanation:

    1. Addition, subtraction, multiplication এবং division-এর জন্য আলাদা function তৈরি করা হয়েছে।
    2. প্রতিটি function দুইটি parameter receive করছে।
    3. প্রতিটি function result return করছে।
    4. Division function-এ zero division check করা হয়েছে।

    ২২. Complete Practice Program

    নিচের program-এ built-in function, module function, user defined function, default parameter, positional parameter, return value, flow of execution এবং scope — একসাথে দেখানো হয়েছে।

    import math
    
    school_name = "ABC School"
    
    def greet_student(name="Student"):
        print("Welcome", name)
    
    def calculate_average(mark1, mark2, mark3):
        total = mark1 + mark2 + mark3
        average = total / 3
        return average
    
    def square_root_value(number):
        return math.sqrt(number)
    
    def show_school():
        print("School:", school_name)
    
    def local_scope_example():
        message = "This is local variable"
        print(message)
    
    print("Program starts")
    
    greet_student()
    greet_student("Rahim")
    
    avg = calculate_average(80, 85, 90)
    print("Average Marks:", avg)
    
    root = square_root_value(64)
    print("Square Root:", root)
    
    show_school()
    local_scope_example()
    
    print("Program ends")

    Program Explanation:

    1. math module import করে module function ব্যবহার করা হয়েছে।
    2. school_name global variable হিসেবে define করা হয়েছে।
    3. greet_student() function default parameter ব্যবহার করছে।
    4. calculate_average() function positional parameters receive করে average return করছে।
    5. square_root_value() function module function math.sqrt() ব্যবহার করছে।
    6. show_school() function global variable read করছে।
    7. local_scope_example() function local variable ব্যবহার করছে।
    8. Program flow function call অনুযায়ী এক function থেকে আরেক function-এ যাচ্ছে।

    ২৩. Function Concepts Summary Table

    Concept ব্যাখ্যা Example
    Built-in Function Python-এ আগে থেকেই থাকা function print(), len(), max()
    Module Function Module import করে ব্যবহার করা function math.sqrt(), random.randint()
    User Defined Function Programmer নিজে তৈরি করে def greet():
    Parameter Function definition-এর variable def add(a, b):
    Argument Function call করার সময় পাঠানো value add(10, 20)
    Default Parameter Parameter-এর default value থাকে def greet(name="Guest"):
    Positional Parameter Argument order অনুযায়ী value assign হয় student("Rahim", 20)
    Return Value Function result caller-এর কাছে পাঠায় return result
    Global Scope Function-এর বাইরে variable x = 10 outside function
    Local Scope Function-এর ভিতরে variable x = 10 inside function

    ২৪. Common Mistakes in Functions

    • Function call না করা: Function define করলে body execute হয় না; call করতে হয়।
    • Indentation ভুল করা: Function body অবশ্যই indent করতে হবে।
    • Colon ভুলে যাওয়া: def function_name(): শেষে colon দিতে হয়।
    • Parameter এবং argument সংখ্যা mismatch: Function যত parameter expect করে, call করার সময় ঠিক তত argument দিতে হবে, যদি default না থাকে।
    • return এবং print confuse করা: print() output দেখায়, return value ফেরত দেয়।
    • Local variable function-এর বাইরে access করা: Local variable function-এর বাইরে available নয়।
    • Default parameter-এর পরে non-default parameter রাখা: এটি SyntaxError দেয়।
    • Global variable modify করতে global keyword না ব্যবহার করা: Function-এর ভিতরে global variable modify করতে global দরকার।

    Wrong Example:

    def add(a, b)
        return a + b

    এখানে colon নেই, তাই SyntaxError হবে।

    Correct Example:

    def add(a, b):
        return a + b

    ২৫. উপসংহার

    Python functions programming-এর একটি মৌলিক এবং অত্যন্ত গুরুত্বপূর্ণ অংশ। Function ব্যবহার করে আমরা program-কে ছোট ছোট meaningful parts-এ divide করতে পারি। এতে code reusable, readable এবং maintainable হয়।

    Python-এ built-in functions সরাসরি ব্যবহার করা যায়, module-defined functions import করে ব্যবহার করতে হয়, এবং user defined functions programmer নিজে তৈরি করে। User defined function তৈরি করতে def keyword ব্যবহার করা হয়। Function parameters value receive করে এবং arguments function call-এর সময় value পাঠায়।

    Default parameters function-কে flexible করে, positional parameters argument order অনুযায়ী value assign করে, এবং return statement function থেকে calculated value ফেরত পাঠায়। Function-এর flow of execution বুঝলে বোঝা যায় program কীভাবে function call-এর সময় ভিতরে যায় এবং কাজ শেষ হলে আবার main flow-তে ফিরে আসে।

    Variable scope বুঝা খুব জরুরি, কারণ কোন variable কোথায় access করা যাবে তা scope নির্ধারণ করে। Global variable function-এর বাইরে থাকে এবং local variable function-এর ভিতরে থাকে। একজন beginner programmer functions ভালোভাবে শিখলে calculator, grade system, factorial, searching, validation, data processing এবং real-world application development অনেক সহজে করতে পারবে।