Table of Contents
چرا «مقدار بازگشتی» مهم است؟
وقتی یک تابع کارش را انجام میدهد، معمولاً میخواهیم نتیجهٔ آن کار را جایی استفاده کنیم.
این نتیجه همان مقدار بازگشتی (Return Value) است.
بدون مقدار بازگشتی، تابع فقط کاری انجام میدهد (مثلاً چاپ روی صفحه) و تمام میشود.
با مقدار بازگشتی، تابع میتواند نتیجه را به برنامه برگرداند تا:
- در متغیر ذخیره شود
- در محاسبات بعدی استفاده شود
- به تابع دیگری داده شود
- در خروجی چاپ شود
دستور `return` در تابع
برای برگرداندن مقدار از تابع از کلمهٔ کلیدی return استفاده میکنیم.
def جمع_دو_عدد(a, b):
نتیجه = a + b
return نتیجه
x = جمع_دو_عدد(3, 5)
print(x) # 8در این مثال:
- تابع
جمع_دو_عدددو عدد میگیرد - آنها را جمع میکند
- با
returnحاصل را برمیگرداند - مقدار برگشتی در متغیر
xذخیره میشود
تفاوت `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توضیح:
جمع_با_printنتیجه را فقط چاپ میکند، اما چیزی برنمیگرداند → مقدار برگشتی آنNoneاست.جمع_با_returnمقدار را برمیگرداند، پس میتوان آن را در متغیر ذخیره کرد.
اگر میخواهید نتیجهٔ تابع را بعداً استفاده کنید → باید return داشته باشید، نه فقط print.
البته میتوانید هردو را داشته باشید، ولی معمولاً بهتر است تابع فقط برگرداند و چاپ در جای دیگری انجام شود.
مقدار پیشفرض بازگشتی: `None`
اگر در تابع هیچ returnای ننویسید، پایتون بهطور خودکار مقدار None را برمیگرداند.
def سلام():
print("سلام!")
نتیجه = سلام()
print("نتیجه:", نتیجه) # نتیجه: Noneاینجا:
- تابع
سلامفقط چاپ میکند - ولی باز هم یک مقدار برگشتی دارد:
None
None یعنی «هیچ» یا «بدون مقدار مفید».
برگرداندن مقدار و توقف اجرای تابع
به محض اینکه پایتون به دستور return برسد:
- مقدار را برمیگرداند
- اجرای تابع در همان لحظه متوقف میشود
- کدهای بعد از
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 توابعی که «فقط کار میکنند»
بهطور کلی میتوان تابعها را از این نظر به دو دسته تقسیم کرد:
- توابعی که نتیجه برمیگردانند
- مناسب برای محاسبات، تبدیل دادهها، آمادهکردن اطلاعات
- معمولاً هیچ چیزی چاپ نمیکنند، فقط
returnدارند - توابعی که فقط کاری انجام میدهند (بدون مقدار مفید)
- مثل چاپ کردن، نوشتن در فایل، ذخیره در پایگاه داده
- ممکن است
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`
- میتوانید در یک تابع چند
returnدر مسیرهای مختلف شرطی داشته باشید
(ولی در هر اجرای تابع، فقط یکی از آنها اجرا میشود).
def علامت_عدد(n):
if n > 0:
return "مثبت"
elif n < 0:
return "منفی"
else:
return "صفر"- میتوانید از
returnبدون مقدار هم استفاده کنید تا فقط از تابع خارج شوید؛ در این حالت مقدار برگشتیNoneاست.
def چاپ_مثبت(n):
if n <= 0:
return # خروج زودهنگام
print("عدد مثبت است:", n)- بهتر است تابعهای محاسباتی همیشه یک نوع مشخص برگردانند؛
مثلاً گاهی عدد و گاهی رشته برنگردانند، چون استفاده از آنها را سخت میکند.
تمرینهای پیشنهادی
برای تمرین مفهوم مقادیر بازگشتی، سعی کنید این تابعها را بنویسید:
- تابعی که یک عدد بگیرد و قدر مطلق آن را برگرداند
(اگر منفی بود، آن را مثبت کند؛ اگر مثبت بود همان را برگرداند). - تابعی به نام
حداکثر_دو_عدد(a, b)که بزرگترِ دو عدد را برگرداند
(ازifاستفاده کنید). - تابعی که یک رشته بگیرد و تعداد حروف آن را برگرداند (بدون استفاده از
len، با یک حلقه بهصورت ساده). - تابعی که دو عدد بگیرد و هم جمع و هم میانگین آنها را برگرداند
(دو مقدار با هم برگردانید و در دو متغیر جدا ذخیره کنید).
در همهٔ این تمرینها، سعی کنید:
- تابع فقط مقدار را برگرداند
- چاپ نتیجه را خارج از تابع انجام دهید
- حواستان به
returnو توقف تابع باشد