Kahibaro
Discord Login Register

مقادیر بازگشتی

چرا «مقدار بازگشتی» مهم است؟

وقتی یک تابع کارش را انجام می‌دهد، معمولاً می‌خواهیم نتیجهٔ آن کار را جایی استفاده کنیم.
این نتیجه همان مقدار بازگشتی (Return Value) است.

بدون مقدار بازگشتی، تابع فقط کاری انجام می‌دهد (مثلاً چاپ روی صفحه) و تمام می‌شود.
با مقدار بازگشتی، تابع می‌تواند نتیجه را به برنامه برگرداند تا:

دستور `return` در تابع

برای برگرداندن مقدار از تابع از کلمهٔ کلیدی return استفاده می‌کنیم.

def جمع_دو_عدد(a, b):
    نتیجه = a + b
    return نتیجه
x = جمع_دو_عدد(3, 5)
print(x)     # 8

در این مثال:

تفاوت `print` و `return`

این اشتباه در بین مبتدیان بسیار رایج است:
print نمایش می‌دهد، اما return برمی‌گرداند.

def جمع_با_print(a, b):
    print(a + b)
def جمع_با_return(a, b):
    return a + b
x = جمع_با_print(2, 3)
y = جمع_با_return(2, 3)
print("x =", x)   # x = None
print("y =", y)   # y = 5

توضیح:

اگر می‌خواهید نتیجهٔ تابع را بعداً استفاده کنید → باید return داشته باشید، نه فقط print.

البته می‌توانید هردو را داشته باشید، ولی معمولاً بهتر است تابع فقط برگرداند و چاپ در جای دیگری انجام شود.

مقدار پیش‌فرض بازگشتی: `None`

اگر در تابع هیچ returnای ننویسید، پایتون به‌طور خودکار مقدار None را برمی‌گرداند.

def سلام():
    print("سلام!")
نتیجه = سلام()
print("نتیجه:", نتیجه)   # نتیجه: None

اینجا:

None یعنی «هیچ» یا «بدون مقدار مفید».

برگرداندن مقدار و توقف اجرای تابع

به محض این‌که پایتون به دستور return برسد:

def نمونه():
    print("قبل از return")
    return 10
    print("بعد از return")  # هرگز اجرا نمی‌شود
x = نمونه()
# خروجی:
# قبل از return

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

برگرداندن نتیجهٔ محاسبات

تابع‌ها معمولاً برای محاسبات و برگرداندن نتیجه استفاده می‌شوند.

def میانگین(a, b, c):
    مجموع = a + b + c
    return مجموع / 3
m = میانگین(10, 20, 40)
print(m)   # 23.3333333333

می‌توانید مستقیماً عبارت را در return بنویسید:

def میانگین(a, b, c):
    return (a + b + c) / 3

برگرداندن مقادیر مختلف بر اساس شرط

می‌توانیم با if، elif، else در تابع تصمیم بگیریم چه مقداری برگردد.

def وضعیت_نمره(نمره):
    if نمره >= 90:
        return "عالی"
    elif نمره >= 70:
        return "خوب"
    elif نمره >= 50:
        return "قبول"
    else:
        return "مردود"
print(وضعیت_نمره(85))   # خوب

در این تابع، بسته به مقدار نمره، یکی از چهار رشته برگردانده می‌شود.

نکتهٔ مهم:
در همهٔ مسیرهای ممکن باید return وجود داشته باشد؛
وگرنه در بعضی حالت‌ها تابع None برمی‌گرداند.

مثال مشکل‌دار:

def وضعیت(نمره):
    if نمره >= 50:
        return "قبول"
    # اگر نمره < 50 باشد، هیچ return ای نیست → مقدار None
print(وضعیت(30))   # None

برای اصلاح، یک else اضافه می‌کنیم:

def وضعیت(نمره):
    if نمره >= 50:
        return "قبول"
    else:
        return "مردود"

برگرداندن چند مقدار (با تاپل)

تابع در ظاهر فقط یک مقدار برمی‌گرداند، اما این مقدار می‌تواند یک تاپل، لیست، دیکشنری و … باشد.
روش رایج: برگرداندن چند چیز در قالب یک تاپل.

def جمع_و_تفاضل(a, b):
    جمع = a + b
    تفاضل = a - b
    return جمع, تفاضل   # یک تاپل (جمع، تفاضل) برمی‌گرداند
نتیجه_جمع, نتیجه_تفاضل = جمع_و_تفاضل(10, 4)
print("جمع:", نتیجه_جمع)       # 14
print("تفاضل:", نتیجه_تفاضل)   # 6

در واقع return جمع, تفاضل معادل است با:

return (جمع, تفاضل)

و نتیجه_جمع, نتیجه_تفاضل = ... عمل بازکردن تاپل (unpacking) است.

توابعی که برمی‌گردانند vs توابعی که «فقط کار می‌کنند»

به‌طور کلی می‌توان تابع‌ها را از این نظر به دو دسته تقسیم کرد:

  1. توابعی که نتیجه برمی‌گردانند
    • مناسب برای محاسبات، تبدیل داده‌ها، آماده‌کردن اطلاعات
    • معمولاً هیچ چیزی چاپ نمی‌کنند، فقط return دارند
  2. توابعی که فقط کاری انجام می‌دهند (بدون مقدار مفید)
    • مثل چاپ کردن، نوشتن در فایل، ذخیره در پایگاه داده
    • ممکن است print داشته باشند
    • معمولاً مقدار برگشتی‌شان None است

مثال:

def مساحت_دایره(شعاع):
    pi = 3.14159
    return pi * شعاع * شعاع   # تابع محاسباتی
def چاپ_مساحت(شعاع):
    مساحت = مساحت_دایره(شعاع)
    print("مساحت دایره:", مساحت)   # تابع نمایشی

اینجا منطقی است که:

استفاده از مقدار بازگشتی در توابع دیگر

یکی از قدرت‌های اصلی توابع این است که نتیجهٔ آن‌ها می‌تواند ورودی تابع‌های دیگر شود.

def مربع(x):
    return x * x
def مجموع_مربع_ها(a, b):
    return مربع(a) + مربع(b)
نتیجه = مجموع_مربع_ها(3, 4)   # 3*3 + 4*4 = 25
print(نتیجه)

اینجا مقدار بازگشتی تابع مربع در تابع دیگری استفاده شده است.

چند نکتهٔ مهم دربارهٔ `return`

  def علامت_عدد(n):
      if n > 0:
          return "مثبت"
      elif n < 0:
          return "منفی"
      else:
          return "صفر"
  def چاپ_مثبت(n):
      if n <= 0:
          return      # خروج زودهنگام
      print("عدد مثبت است:", n)

تمرین‌های پیشنهادی

برای تمرین مفهوم مقادیر بازگشتی، سعی کنید این تابع‌ها را بنویسید:

  1. تابعی که یک عدد بگیرد و قدر مطلق آن را برگرداند
    (اگر منفی بود، آن را مثبت کند؛ اگر مثبت بود همان را برگرداند).
  2. تابعی به نام حداکثر_دو_عدد(a, b) که بزرگ‌ترِ دو عدد را برگرداند
    (از if استفاده کنید).
  3. تابعی که یک رشته بگیرد و تعداد حروف آن را برگرداند (بدون استفاده از len، با یک حلقه به‌صورت ساده).
  4. تابعی که دو عدد بگیرد و هم جمع و هم میانگین آن‌ها را برگرداند
    (دو مقدار با هم برگردانید و در دو متغیر جدا ذخیره کنید).

در همهٔ این تمرین‌ها، سعی کنید:

Views: 5

Comments

Please login to add a comment.

Don't have an account? Register now!