انواع تابع از نظر خروجی
در واقع، در این درس انواع تابع از نظر خروجی را از پایه و با مثال یاد میگیرید.
بنابراین در درس قبل ورودی تابع را کامل بررسی کردیم. حالا ببینیم تابع چطور نتیجه را برمیگرداند.
تابعی که چیزی برنمیگرداند
def log(message):
print("[LOG]", message)
result = log("شروع شد")
print(result)
[LOG] شروع شد
None
همچنین، این تابع کارش را انجام میدهد ولی چیزی تحویل نمیدهد. این غلط نیست؛ خیلی از توابع فقط کاری انجام میدهند.
تابعی که یک مقدار برمیگرداند
def area(width, height):
return width * height
print(area(3, 4))
تابعی که چند مقدار برمیگرداند
در واقع، در خیلی از زبانها این کار دردسر دارد. در پایتون کافی است با کاما جداشان کنید:
def min_max(numbers):
return min(numbers), max(numbers)
lowest, highest = min_max([4, 9, 2, 7])
print(lowest)
print(highest)
2
9
اینجا چه اتفاقی میافتد؟ پایتون در واقع یک چیز برمیگرداند، نه دو چیز. آن یک چیز، یک تاپل است:
result = min_max([4, 9, 2, 7])
print(result)
print(type(result))
(2, 9)
<class 'tuple'>
پس آن خط lowest, highest = ... همان بازکردن تاپل است که در درس تاپل یاد گرفتید. مفهوم جدیدی در کار نیست.
برگشت زودهنگام
تابع میتواند چند جا return داشته باشد. هر کدام زودتر اجرا شود، کار تمام است:
def divide(a, b):
if b == 0:
return "تقسیم بر صفر ممکن نیست"
return a / b
print(divide(10, 2))
print(divide(10, 0))
5.0
تقسیم بر صفر ممکن نیست
این الگو که شرطهای خطا را اول تابع بررسی کنید و زود برگردید، کد را خیلی خواناتر میکند. جایگزینش شرطهای تودرتویی است که خواندنشان سخت میشود.
ولی یک نکتهی مهم: در این مثال، تابع گاهی عدد برمیگرداند و گاهی رشته. این کار را در کد جدی نکنید، چون کسی که تابعتان را صدا میزند نمیداند باید منتظر چه نوعی باشد. در درس مدیریت خطا میبینید که راه درستش چیست.
اشتباهات رایج
کد بعد از return
def area(width, height):
return width * height
print("محاسبه انجام شد")
آن print هرگز اجرا نمیشود و پایتون هم هشداری نمیدهد.
فراموش کردن return در بعضی مسیرها
def check(age):
if age >= 18:
return "بزرگسال"
print(check(20))
print(check(10))
بزرگسال
None
اگر هیچ return اجرا نشود، خروجی None است. مطمئن شوید تمام مسیرهای تابع، مقدار مشخصی برمیگردانند.
جمعبندی
تابع میتواند هیچ مقداری برنگرداند، یک مقدار برگرداند، یا چند مقدار که در واقع یک تاپل هستند. تابعی که return ندارد، None میدهد.
در درس بعدی شکل کوتاهشدهی تابع را یاد میگیرید؛ همان lambda که در درس مرتبسازی دیکشنری به آن برخوردید.
برای مطالعهی بیشتر میتوانید به مستندات رسمی پایتون سر بزنید.
این درس بخشی از دوره آموزش پایتون مقدماتی است.