Python

تعریف توابع در پایتون

توابع در پایتون: بلوک‌های کد قابل استفاده مجدد

تابع در پایتون قطعه‌ای از کد است که یک کار مشخص را انجام می‌دهد و می‌توان آن را بارها در برنامه فراخوانی کرد. این کار باعث می‌شود کد شما سازمان‌یافته‌تر، قابل فهم‌تر و قابل نگهداری‌تر شود. همچنین از تکرار کد جلوگیری می‌کند و به شما اجازه می‌دهد تا کد خود را به بخش‌های کوچکتر و قابل مدیریت‌تر تقسیم کنید.

چرا از توابع استفاده می‌کنیم؟

  • سازماندهی کد: توابع به شما کمک می‌کنند تا کد خود را به بخش‌های منطقی تقسیم کنید.
  • استفاده مجدد از کد: یک تابع را می‌توان بارها در برنامه فراخوانی کرد، بنابراین نیازی به نوشتن مجدد کد مشابه نیست.
  • افزایش خوانایی کد: توابع با نام‌های توصیفی می‌توانند کد شما را بسیار خواناتر کنند.
  • تست آسان‌تر کد: توابع را می‌توان به صورت جداگانه تست کرد.
  • کاهش خطا: با تقسیم کردن کد به توابع کوچکتر، پیدا کردن و رفع خطاها آسان‌تر می‌شود.

نحوه تعریف یک تابع در پایتون

برای تعریف یک تابع در پایتون، از کلمه کلیدی def استفاده می‌شود. پس از آن نام تابع و پرانتز‌هایی قرار می‌گیرد که در صورت نیاز پارامترهای تابع را در خود جای می‌دهند. بدنه تابع با یک تب تورفتگی شروع می‌شود.

Python
def نام_تابع(پارامتر۱, پارامتر۲, ...):
    # بدنه تابع
    # دستورات داخل تابع
    return مقدار_بازگشتی  # اختیاری
  • def function_name(parameters):
        """Optional docstring."""
        # Code block
        return value  # Optional
    

     

  • def: کلمه کلیدی برای تعریف تابع
  • نام_تابع: نامی که برای تابع انتخاب می‌کنید. بهتر است نامی توصیفی و مرتبط با کار تابع انتخاب شود.
  • پارامترها: متغیرهایی هستند که به عنوان ورودی به تابع داده می‌شوند.
  • بدنه تابع: مجموعه‌ای از دستورات که توسط تابع اجرا می‌شوند.
  • return: (اختیاری) مقداری را که تابع برمی‌گرداند مشخص می‌کند. اگر عبارتی پس از return نوشته نشود، تابع مقدار None را برمی‌گرداند.

مثال

Python
def سلام_بگو(نام):
    print(f"سلام {نام}!")

سلام_بگو("علی")  # خروجی: سلام علی!

در این مثال، تابعی به نام سلام_بگو تعریف شده است که یک پارامتر به نام نام می‌گیرد و یک پیام سلام را چاپ می‌کند.

فراخوانی تابع

برای اجرای یک تابع، کافی است نام آن را به همراه آرگومان‌های آن (در صورت وجود) درون پرانتز بنویسیم.

انواع پارامترها

  • انواع پارامترها در توابع پایتون

    در پایتون، توابع می‌توانند انواع مختلفی از پارامترها را بپذیرند. هر نوع پارامتر، نحوه‌ی ارسال آرگومان‌ها به تابع و رفتار تابع را به گونه‌ای متفاوت تعریف می‌کند. در ادامه به بررسی انواع اصلی پارامترها در پایتون می‌پردازیم:

    ۱. پارامترهای ضروری (Positional Arguments)

    • تعریف: این پارامترها باید به ترتیب هنگام فراخوانی تابع مشخص شوند.
    • مثال:
      Python
      def جمع(a, b):
          return a + b
      
      نتیجه = جمع(۳, ۵)  # a=3, b=5

    ۲. پارامترهای پیش‌فرض (Default Arguments)

    • تعریف: برای این پارامترها، یک مقدار پیش‌فرض مشخص می‌شود. اگر هنگام فراخوانی تابع، مقداری برای این پارامترها داده نشود، از مقدار پیش‌فرض استفاده می‌شود.
    • مثال:
      Python
      def سلام_بگو(نام="مهمان"):
          print(f"سلام {نام}!")
      
      سلام_بگو()  # خروجی: سلام مهمان!
      سلام_بگو("علی")  # خروجی: سلام علی!

    ۳. پارامترهای متغیر موقعیتی (*args)

    • تعریف: با استفاده از *args می‌توان تعداد نامحدودی آرگومان موقعیتی را به تابع ارسال کرد. این آرگومان‌ها به صورت یک تاپل در داخل تابع قابل دسترسی هستند.
    • مثال:
      Python
      def جمع_همه(*اعداد):
          نتیجه = ۰
          for عدد in اعداد:
              نتیجه += عدد
          return نتیجه
      
      نتیجه = جمع_همه(۱, ۲, ۳, ۴)  # خروجی: ۱۰

    ۴. پارامترهای متغیر کلیدی (**kwargs)

    • تعریف: با استفاده از **kwargs می‌توان تعداد نامحدودی آرگومان کلیدی را به تابع ارسال کرد. این آرگومان‌ها به صورت یک دیکشنری در داخل تابع قابل دسترسی هستند.
    • مثال:
      Python
      def چاپ_اطلاعات(**اطلاعات):
          for کلید, مقدار in اطلاعات.items():
              print(f"{کلید}: {مقدار}")
      
      چاپ_اطلاعات(نام="علی", سن=۳۰, شهر="تهران")
      

    ۵. پارامترهای کیوردی (Keyword Arguments)

    • تعریف: پارامترهایی هستند که هنگام فراخوانی تابع با نامشان مشخص می‌شوند. ترتیب آن‌ها اهمیتی ندارد.
    • مثال:
      Python
      def تقسیم(عدد_تقیسم_شونده, مخرج):
          return عدد_تقیسم_شونده // مخرج
      
      نتیجه = تقسیم(مخرج=۳, عدد_تقیسم_شونده=۱۷)
      

    نکات مهم:

    • پارامترهای ضروری باید قبل از پارامترهای پیش‌فرض قرار بگیرند.
    • پارامترهای *args باید قبل از **kwargs قرار بگیرند.
    • ترکیب این انواع پارامترها در تعریف توابع امکان‌پذیر است.
    • ترتیب پارامترهای کیوردی هنگام فراخوانی تابع مهم نیست، اما ترتیب پارامترهای موقعیتی مهم است.

    مثال ترکیب انواع پارامترها:

    Python
    def تابع_نمونه(a, b=۲, *args, **kwargs):
        print(a, b, args, kwargs)
    
    تابع_نمونه(۱, c=۳, d=۴, x=۵, y=۶)
    

    در این مثال:

    • a یک پارامتر ضروری است.
    • b یک پارامتر پیش‌فرض با مقدار ۲ است.
    • *args یک پارامتر متغیر موقعیتی است که مقادیر (۳, ۴) را دریافت می‌کند.
    • **kwargs یک پارامتر متغیر کلیدی است که دیکشنری {'c': 3, 'd': 4, 'x': 5, 'y': 6} را دریافت می‌کند.

    با درک این انواع پارامترها، می‌توانید توابع منعطف و قدرتمندی در پایتون تعریف کنید.

مثال‌های بیشتر

Python
def جمع(a, b):
    return a + b

نتیجه = جمع(۳, ۵)
print(نتیجه)  # خروجی: ۸

def محاسبه_مساحت_دایره(شعاع):
    pi = ۳.۱۴۱۵۹
    مساحت = pi * شعاع * شعاع
    return مساحت

توابع با چندین مقدار بازگشتی

در پایتون، یک تابع می‌تواند چندین مقدار را به عنوان خروجی بازگرداند. این کار با استفاده از ویژگی‌های Tuple (یک نوع داده در پایتون که می‌تواند چندین مقدار را در خود نگه دارد) به راحتی انجام می‌شود. هنگامی که یک تابع چند مقدار را برمی‌گرداند، در واقع یک Tuple برگردانده می‌شود که می‌توانید آن را به متغیرهای مختلف اختصاص دهید.

 

 

۱. بازگرداندن چند مقدار در یک تابع

برای بازگرداندن چندین مقدار از یک تابع، به سادگی مقادیر را به صورت جدا شده با کاما , پس از دستور return قرار دهید.

مثال ۱: تابعی که دو مقدار را بازمی‌گرداند

def get_coordinates():
    x = 10
    y = 20
    return x, y

# دریافت مقادیر بازگشتی
x_coord, y_coord = get_coordinates()

print(f"x: {x_coord}, y: {y_coord}")
# خروجی: x: 10, y: 20

در این مثال، تابع get_coordinates دو مقدار x و y را بازمی‌گرداند. هنگام فراخوانی تابع، این مقادیر به دو متغیر x_coord و y_coord اختصاص داده می‌شوند.

۲. بازگرداندن چندین مقدار به صورت Tuple

اگر نیاز به استفاده از تمامی مقادیر بازگشتی به صورت یکجا دارید، می‌توانید به صورت مستقیم یک Tuple را دریافت کنید.

مثال ۲: دریافت مقادیر به صورت Tuple

def get_user_info():
    name = "Ali"
    age = 30
    city = "Tehran"
    return name, age, city

user_info = get_user_info()

print(user_info)
# خروجی: ('Ali', 30, 'Tehran')

# دسترسی به هر مقدار با استفاده از اندیس
print(user_info[0])  # خروجی: Ali
print(user_info[1])  # خروجی: ۳۰
print(user_info[2])  # خروجی: Tehran

۳. تخصیص چندین مقدار بازگشتی به متغیرها

می‌توانید چندین مقدار بازگشتی را به متغیرهای جداگانه اختصاص دهید.

مثال ۳: تخصیص مقادیر به متغیرهای جداگانه

def get_statistics(numbers):
    mean = sum(numbers) / len(numbers)
    maximum = max(numbers)
    minimum = min(numbers)
    return mean, maximum, minimum

numbers = [1, 2, 3, 4, 5]
mean_val, max_val, min_val = get_statistics(numbers)

print(f"Mean: {mean_val}, Max: {max_val}, Min: {min_val}")
# خروجی: Mean: 3.0, Max: 5, Min: 1

۴. بازگرداندن چندین مقدار به صورت دیکشنری (اختیاری)

گاهی اوقات، ممکن است بخواهید مقادیر بازگشتی با نام‌های مشخصی برگردانده شوند. در این صورت می‌توانید از دیکشنری استفاده کنید.

مثال ۴: بازگرداندن چندین مقدار با استفاده از دیکشنری

def get_student_details():
    student = {
        "name": "Sara",
        "age": 22,
        "major": "Computer Science"
    }
    return student

details = get_student_details()

print(details)
# خروجی: {'name': 'Sara', 'age': 22, 'major': 'Computer Science'}

print(details['name'])  # خروجی: Sara

توابع بازگشتی

توابع بازگشتی توابعی هستند که خودشان را فراخوانی می‌کنند. این نوع توابع برای حل مسائل بازگشتی بسیار مفید هستند.

Python
def فاکتوریل(n):
    if n == ۰:
        return ۱
    else:
        return n * فاکتوریل(n-۱)

تابع با تعداد نامشخص آرگومان‌ها

در پایتون، *args (که می‌تواند هر نام دلخواهی داشته باشد، اما به طور معمول args نامیده می‌شود) به شما این امکان را می‌دهد که تعداد متغیری از آرگومان‌ها را به یک تابع ارسال کنید. این ویژگی زمانی مفید است که نمی‌دانید تابع شما چند آرگومان دریافت خواهد کرد، یا وقتی که می‌خواهید توابعی انعطاف‌پذیر داشته باشید.

۱. تعریف تابع با *args

هنگامی که از *args در تعریف یک تابع استفاده می‌کنید، همه آرگومان‌های اضافی که به تابع ارسال می‌شوند به عنوان یک Tuple در args جمع‌آوری می‌شوند.

مثال ۱: تابعی که جمع تمامی آرگومان‌ها را محاسبه می‌کند

def add_numbers(*args):
    return sum(args)

result = add_numbers(1, 2, 3, 4)
print(result)  # خروجی: ۱۰

در این مثال، تابع add_numbers می‌تواند هر تعداد آرگومان عددی را دریافت کند و جمع آن‌ها را محاسبه کند.

۲. استفاده از *args همراه با آرگومان‌های دیگر

می‌توانید *args را همراه با سایر آرگومان‌های ثابت در یک تابع استفاده کنید. فقط باید دقت کنید که *args باید بعد از سایر آرگومان‌ها بیاید.

مثال ۲: ترکیب آرگومان‌های ثابت و *args

def greet(greeting, *names):
    for name in names:
        print(f"{greeting}, {name}!")

greet("Hello", "Ali", "Sara", "John")
# خروجی:
# Hello, Ali!
# Hello, Sara!
# Hello, John!

در این مثال، آرگومان greeting به صورت ثابت است و *names یک Tuple از اسامی است که به تابع ارسال شده‌اند.

۳. استفاده از *args برای ارسال لیست/تاپل به عنوان آرگومان‌ها

اگر می‌خواهید یک لیست یا Tuple را به صورت آرگومان‌های جداگانه به یک تابع ارسال کنید، می‌توانید از * استفاده کنید.

مثال ۳: ارسال لیست به عنوان آرگومان‌های جداگانه

def multiply(*args):
    result = 1
    for num in args:
        result *= num
    return result

numbers = [2, 3, 4]
print(multiply(*numbers))  # خروجی: ۲۴

۴. کاربردهای رایج *args

مثال ۴: تابعی که مقدار بیشترین آرگومان را پیدا می‌کند

 

def find_max(*args):
    return max(args)

print(find_max(1, 3, 5, 7, 9))  # خروجی: ۹

مثال ۵: تابعی که رشته‌ها را با هم ترکیب می‌کند

def concatenate_strings(*args):
    return ' '.join(args)

print(concatenate_strings("Python", "is", "awesome!"))  # خروجی: "Python is awesome!"

نکات مهم

  • نام توابع باید توصیفی و با حروف کوچک نوشته شوند.
  • از استفاده از کاراکترهای خاص در نام توابع خودداری کنید.
  • سعی کنید توابعی با عملکرد مشخص و محدود تعریف کنید.
  • از توابع بازگشتی با احتیاط استفاده کنید تا از ایجاد حلقه‌های بی‌نهایت جلوگیری شود.

با استفاده از توابع، کدهای خود را سازماندهی کرده، خوانایی آن‌ها را افزایش داده و از قابلیت استفاده مجدد آن‌ها بهره‌مند شوید.

 

۵/۵ ( ۱ امتیاز )
نمایش بیشتر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا