دستور Return در پایتون چیست؟ – آموزش به زبان ساده
در زمان یادگیری زبان برنامهنویسی پایتون یا هر زبان برنامهنویسی دیگری با عبارتی به نام return روبهرو خواهیم شد. این عبارت برای تازهکاران میتواند کمی گمراهکننده باشد. اما نگران نباشید، درباره return و روش کار و اهمیت آن در زبان پایتون هر آنچه که لازم است را تا انتهای این مطلب، خواهید آموخت. عبارت return در پایتون باعث خروج فرایند اجرای برنامه از تابع میشود و با خود مقدار مشخص شدهای را نیز به فرایندی که تابع را فراخوانی کرده برمیگرداند. چندین عبارت return مختلف میتوانند در یک تابع وجود داشته باشند، اما هر کدام از آنها که بتواند شرایط تابع را تامین کند اول از همه اجرا میشود. در هر تابع فقط یکبار عبارت return اجرا میشود. پس بقیه return های تعریف شده، بدون اجرا باقی میمانند.
کلمه کلیدی return ، از کلمات کلیدی تعریف شده در پایتون است که برای افزایش خوانایی برنامه و نوشتن کدهای تمیز بهکار برده میشود. در این مطلب از مجله فرادرس همه مطالب بنیادینی که لازم است به عنوان برنامهنویس پایتون، درباره return بدانیم را بررسی کردهایم.
دستور return در پایتون چیست؟
دستور return در پایتون درون توابع استفاده میشود. این دستور برای پایان دادن به فرایند اجرای تابع در برنامهنویسی بهکار میرود. هر وقت نوبت به اجرای این دستور برسد تابع مورد نظر از صف اجرا خارج میشود و نتیجه آماده شده در تابع به فرایندی که تابع را فراخوانی کرده ارسال میشود. برای درک بهتر مطلب به مفهوم پیشخدمت در رستوران فکر کنید. به عبارت return به عنوان پیشخدمتی فکر کنید که غذای آماده شده -خروجی تابع- را برای مشتری یا مرجع فراخوانی تابع میآورد.
در کد پایین، روش استفاده از عبارت return را به صورت کاملا ساده نمایش دادهایم.
1def add_numbers(num1, num2):
2 return num1 + num2
در مثال بالا، میتوانید تابع add_numbers() را با دو مقدار عددی به عنوان پارامتر فراخوانی کنید. این تابع نتیجه جمع اعداد را به بیرون برمیگرداند یا به عبارتی مقدار جواب را return میکند.
کاربرد عبارت return در پایتون چیست؟
شاید با خود بپرسید که چرا باید از عبارت return استفاده کنیم؟ آیا نمیتوان مقدار جواب تابع را به صورت مستقیم در خروجی با استفاده از تابع print() چاپ کرد؟ بدون شک، میتوان از این روش نیز استفاده کرد. اما بهرهگیری از عبارت return انعطافپذیری بیشتری به کدها میدهد.
تصور کنید که در رستورانی قرار دارید و غذای خود را سفارش دادهاید. بعد از اینکه غذا آماده شد پیشخدمت رستوران بهجای آوردن غذا سر میز، خودش غذا را میخورد. این دقیقا شبیه به همان اتفاق است که بهجای دستور return از دستور print() استفاده کنیم. در این حالت تابع نوشته شده خود از نتیجه عملیات استفاده میکند بهجای اینکه نتیجه را در خروجی برگرداند. اما به عنوان نویسنده کد، شاید بخواهیم به روش مد نظر خود از نتیجه بهره ببریم که در واقع اکثر اوقات نیز همینگونه است.
با کمک دستور return ، میتوانیم نتیجه اجرای تابع را تحویل بگیریم و در هر جای دیگری در برنامه به صورت دلخواه استفاده کنیم. به عنوان مثال، میتوانیم مقدار return شده را در متغیری ذخیره کنیم یا حتی از این مقدار به عنوان ورودی برای تابع دیگری استفاده کنیم.
چگونه از عبارت return در پایتون استفاده کنیم؟
همانطور که اشاره شد در پایتون از عبارت return برای خروج از توابع و برگرداندن مقدار خاصی به مرجعی که تابع را فراخوانی کرده استفاده میشود. در پایین سینتکس پایه برای استفاده از عبارت return را مشاهده میکنید.
1def function_name(parameter1, parameter2):
2 # Function body
3 return return_value
در کد بالا از پارامترها و کلمات کلیدی مختلفی استفاده شده که هر کدام را در فهرست زیر توضیح دادهایم.
- def : کلمه کلیدی که برای شروع تعریف تابع استفاده میشود.
- function_name : شناساگر یکتایی که برای نامگذاری تابع استفاده میشود. در واقع کلمهای که اینجا قرار میگیرد به صورت انحصاری و یکتا به عنوان نام به این تابع، اختصاص پیدا میکند.
- parameter-ها: در اینجا برای تابع دو پارامتر فرضی با نامهای parameter1 و parameter2 تعریف کردهایم. اما تعداد این پارامترها هیچ محدودیتی ندارد. هر تعداد متغیری که درون پرانتزها تعریف کنیم برای وارد کردن داده به تابع استفاده میشوند. وجود این متغیرها اختیاری است.
- return : کلمه کلیدی است که میتوان برای خروج از تابع، حتی قبل از رسیدن به انتهای آن مورد استفاده قرار داد. البته که وجود این کلمه کلیدی نیز در تابع اختیاری است.
- return_value : مقدار یا متغیری که باید از درون تابع به خارج برگردانده شود. وجود این مقدار نیز اختیاری است.
چگونه در کار با زبان برنامه نویسی پایتون پیشرفت کنیم؟
برای اینکه بتوانیم مهارتهای خود را در کار با زبان برنامهنویسی پایتون افزایش بدهیم، باید مفاهیم و ابزارهای پایتون را به صورت عمیقتری بشناسیم و نسبت به ظرایف این زبان برنامهنویسی اطلاعات بیشتری کسب کنیم. کسب این اطلاعات صرفا از طریق مطالعه امری وقتگیر و گاهی بسیار مشکل است. برای یادگیری بهتر لازم است که بخش دیداری و شنیداری مغز ما نیز فعال شود. شرکت در کلاسهای برنامهنویسی نسبت به مطالعه صرف، گزینه بسیار بهتر و کارآمدتری است. اما پیدا کردن کلاس متناسب با شرایط ما از لحاظ مالی، علمی، رفتوآمد و زمانی نیز امری مشکل است. علاوه بر این برای مرور کلاسها هم معمولا چارهای جز مطالعه جزوهها وجود ندارد.
پس بهترین گزینه ممکن استفاده از فیلمهای آموزشی است. این فیلمهای آموزشی محدودیت زمانی و مکانی ندارند. قابل بازبینی مجدد به صورت بیشمار دفعه هستند و در عین حال از قوای یادگیری دیداری و شنیداری دانشجویان نیز کار میکشند. سایت آموزشی فرادرس یکی از بهترین تولید کنندههای فیلمهای اموزشی به زبان فارسی است. کیفیت آموزشهای بالا در کنار طبقهبندی آموزشها به سطوح علمی متفاوت هم گزینه دیگری است که باعث برجسته شدن فرادرس در بین همه دانشجویان شده است.
در این بخش چند مورد از فیلمهای آموزشی متناسب با سطح این مطلب را معرفی کردهایم. در صورتی که تمایل به دیدن فیلمهای بیشتر دارید میتوانید بر روی تصویر بالا کلیک کرده یا مستقیما به وبسایت فرادرس مراجعه کنید.
- فیلم آموزش برنامه نویسی پایتون همراه با مثال های عملی در سایت فرادرس
- فیلم آموزش برنامه نویسی سریع و آسان پایتون در ۱۴۰ دقیقه در فرادرس به صورت رایگان
- فیلم آموزش برنامه نویسی Python دوره مقدماتی فرادرس
- فیلم آموزش برنامه نویسی Python دوره تکمیلی - بخش یکم از فرادرس
- فیلم آموزش کتابخانه Datetime در پایتون برای مدیریت زمان (رایگان) در وبسایت فرادرس
چه زمانی از عبارت return در پایتون استفاده کنیم؟
عبارت return برای برگرداندن نتیجه محاسبات یا فراخوانی دادههای خاصی استفاده میشود. استفاده دیگری که از عبارت return میشود خروج از تابع همزمان با رویدادن شرایط خاصی است. هر سه مورد ذکر شده را در ادامه بررسی کردهایم.
برگرداندن نتایج
وقتی که بخواهیم دادههای خاصی را از تابع به مرجع فراخوانی تابع برگردانیم استفاده از عبارت return ضروری میشود. در کد پایین تابعی را تعریف کردهایم و سپس در ادامه کد این تابع را برای محاسبه مساحت فراخوانی کردیم.
1def calculate_area(length, width):
2 area = length * width
3 return area
4
5area = calculate_area(50, 50) # get the result of the function
6print(f"Calculated area: {area}") # use the result of the function
فراخوانی کردن داده
وقتی که دادههایی را از پایگاه داده یا API واکشی میکنیم، عبارت return میتواند دادههای واکشی شده را به فرایندی که تابع را فراخوانی کرده تحویل بدهد. کدنویسی به این صورت باعث میشود که کدها با قابلیت استفاده مجدد و ماژولار شوند. این کدها خوانایی بیشتری نیز دارند.
در کدهای پایین مثال سادهای درباره استفاده از عبارت return برای فراخوانی داده از طریق پایگاه داده پیادهسازی کردهایم.
1def get_user_email(user_id):
2 user_email = database.query("SELECT email FROM users WHERE id = ?", user_id)
3 return user_email
خروج از توابع بر اساس شرایط تعیین شده
عبارت return به خروج زودهنگام از توابع نیز کمک میکند. با استفاده از این عبارت میتوان شرایط خاصی تعریف کرد که در صورت رخدادن آنها قبل از اینکه کدهای تابع تا به انتها توسط مفسر برنامهنویسی دیده و اجرا شوند از تابع خارج شویم. این امکان باعث ارتقای کارایی برنامه و کاهش احتمال وقوع خطا میشود.
در کد پایین، تابعی را برای نمایش این مطلب، پیادهسازی کردهایم. در این مثال، با استفاده از عبارت شرطی if-elif شرایط مختلفی برای تابع، تعریف شده که در صورت بروز هر کدام تابع بلافاصله ادامه اجرا را متوقف کرده و مقدار False برمیگرداند. همانطور که میبینید برای این تابع چهار بار عبارت return تعریف شده است.
1def validate_age(age):
2 # validate that age is a number or converts to a number
3 if not isinstance(age, (int, float)) or age != int(age):
4 return False
5 elif age < 0:
6 return False
7 elif age > 120:
8 return False
9 return True # if none of the conditions trigger, return True
مثال های از عبارت return در پایتون
استفاده از عبارت return در توابع پایتون، امری بسیار رایج است. در این بخش به بررسی مثالهایی درباره استفاده از این عبارت پرداختهایم.
محاسبه هزینه ها در تجارت الکترونیک | E-Commerce
برای محاسبه مجموع قیمت کالاهای موجود در یک سبد خرید دیجیتال، پلتفرمهای تجارت الکترونیک ممکن است از تابعی همراه با عبارت return به صورت زیر استفاده کنند.
1def calculate_total_price(product_prices, tax_rate, discount):
2 subtotal = sum(product_prices)
3 tax_amount = subtotal * tax_rate
4 discount_amount = subtotal * discount
5 total_price = subtotal + tax_amount - discount_amount
6 return total_price
طبیعتا فرمول محاسبه قیمت میتواند متفاوت باشد اما قاعده کلی استفاده از عبارت return ثابت است.
احراز هویت کاربر
اپلیکیشنی که هویت کاربران را با استفاده از تابع خاصی احراز میکند نیز میتواند از عبارت return برای برگرداندن نتیجه در خروجی کمک بگیرد.
در کد پایین، تابع تعریف شده از عبارت شرطی برای برگرداندن دو نتیجه متفاوت استفاده کرده است. البته میتوان این کد را با استفاده از یک عبارت return نیز نوشت. به عنوان تمرین میتوانید به بازسازی این تابع بپردازید.
1def authenticate_user(username, password):
2 # Assuming there's a database of users with encrypted passwords
3 user = get_user_from_database(username)
4 if user and check_password_encryption(password, user.encrypted_password):
5 return True # Authentication successful
6 else:
7 return False # Authentication failed
علم داده
علم داده اغلب شامل استخراج اطلاعات معنادار از دادههای خام است. دادههایی مانند اندازهگیریهای آماری یکی از مواد خام مورد استفاه علم داده هستند. به عنوان مثال، تابعی را در نظر بگیرید که مجموعه دادهای را مورد پردازش قرار میدهد. این تابع باید میزان میانگین mean ، میانه median و انحراف معیار std_dev را به فرایندی که تابع را فراخوانی کرده برگرداند.
در کد پایین این تابع را شبیهسازی کردیم. توجه کنید که در مقابل عبارت return سه مقدار به صورت همزمان کنار هم قرار داده شدهاند.
1def analyze_data(data):
2 mean = calculate_mean(data)
3 median = calculate_median(data)
4 std_dev = calculate_standard_deviation(data)
5 return mean, median, std_dev # Returning multiple insights as a tuple
در صورتی که نسبت به علم داده یا Data Science کنجکاو هستید و می خواهید که درباره این شاخه تخصصی در برنامهنویسی و مسیر تسلط بر آن و بازار کارش اطلاعات بیشتری کسب کنید، پیشنهاد میکنیم که فیلم آموزشی رایگان آموزش مسیر تبدیل شدن به دانشمند علم داده را در فرادرس با دقت تماشا کنید.
مدیریت پاسخ در API
در حوزه توسعه نرمافزار، نرمافزارها اغلب با API-های خارجی تعامل میکنند. تابعی که در ادامه آمده روش مدیریت و انتقال پاسخهای API-ها را توسط عبارت return نمایش میدهد. این کد تقریبا ترکیبی از کدهای بالا است و توانایی عملیاتی عبارت return را نمایش میدهد.
1import requests
2
3def fetch_api_data(URL):
4 response = requests.get(url)
5 if response.status_code == 200:
6 return True, response.json() # Success, returning status and data
7 else:
8 return False, None # Failure, indicating an issue with the request
بررسی مطالب بیشتر درباره عبارت return در پایتون
در این بخش چند مورد از تواناییهای خاص عملیاتی عبارت return را بررسی خواهیم کرد. این تواناییهای عبارت return باعث افزایش قدرت و کیفیت کدنویسی توابع در پایتون شدهاند.
برگرداندن مقدار None
گاهی اوقات، در توابعی که هدف اصلی از پیادهسازی آنها اجرای عملیات مشخصی است، نیاز به برگرداندن هیچ مقداری نداریم. اما در واقع هر تابعی در پایتون حتما چیزی را برگشت میدهد. توابع پایتون در چنین مواردی بهطور غیر مستقیم مقدار None برمیگردانند. به مثال پایین توجه کنید. البته که با کد return None یا حتی کد return بدون هیچ متغیری نیز میتوان این مثال را نوشت. اما به انتهای همه توابعی که عبارت return ندارند این تکه کد بهطور پیشفرض اضافه و مقدار None برگشت داده میشود.
1def log_message(message):
2 print(message)
3 # No return statement needed; function returns None by default
خروج زودهنگام از تابع
وقتی که شرایط خاصی در تابع به مقادیر True یا False منتهی میشوند، در صورت نیاز میتوانیم با استفاده از عبارت return حتی پیش از پردازش کل کدهای تابع از آن خارج شویم. گاهی اوقات خروج زودهنگام از تابع میتواند اثرگذاری و خوانایی کد را نیز افزایش دهد.
1def log_message(message, log_level):
2 if log_level not in ["INFO", "WARNING", "ERROR"]:
3 return # Early exit if log_level is invalid, implicitly returns None
4 # Proceed with logging the message if log_level is valid
5 print(f"[{log_level}]: {message}")
6
7# Example usage
8log_message("This is a test message.", "DEBUG") # Does nothing and returns None
در کد بالا میبینید که عبارت return بدون هیچ پارامتری استفاده شده است. این عبارت فقط برای به پایان رساندن تابع به کد اضافه شده و به صورت پیشفرض مقدار None برمیگرداند.
برگرداندن چندین مقدار به طور هم زمان
توابع پایتون با بستهبندی مقادیر مختلف در تاپل، لیست یا دیکشنری میتوانند به صورت همزمان چندین مقدار متفاوت را به مرجع فراخوانی خود برگردانند. بعضی از توابع باید وظایفی مرتبط با هم انجام دهند و نتایجی بیش از یک مقدار برگردانند. این ویژگی بهطرز باورنکردنی برای چنین توابعی مفید است. مرجع فراخوانی این نوع از تابعها نیز بهسادگی میتواند بستههای ذخیره داده را باز کند و از دادهها استفاده ببرد.
برای اینکه با انواع ساختارهای ذخیره داده در پایتون مانند موارد نامبرده شده در بالا آشنا شوید میتوانید به مطلب انواع داده در پایتون به زبان ساده در مجله فرادرس رجوع کنید. این مطلب یک دید کلی با اطلاعات کامل درباره هر کدام از ساختارهای داده استفاده شده در پایتون را در اختیار شما قرار میدهد.
در کد پایین با اینکه مقادیر برگشتی در مقابل عبارت return فقط با کاما از یکدیگر جدا شدهاند. اما در خروجی به صورت تاپل برگردانده میشوند.
1def get_user_info(user_id):
2 # Assuming a database query here to fetch user details
3 user_name = "John Doe"
4 user_email = "john.doe@example.com"
5 # Returning multiple values as a tuple
6 return user_name, user_email
7
8# Unpacking the returned tuple into separate variables
9name, email = get_user_info(1)
برگرداندن توابع
پایتون از توابع مرتبه بالا نیز پشتیبانی میکند. پشتیبانی از توابع مرتبه بالاتر به این معنی است که میتوانیم از درون تابعی، تابع دیگری را برگردانیم. بنابراین نیازی نیست که در مقابل عبارت return حتما مقدار مشخصی را قرار بدهیم. این ویژگی بهطور خاص در الگوهای پیشرفته برنامهنویسی مانند دکوریتورها و فکتوریها در پایتون سودمند است.
در کد پیادهسازی شده پایین دو تابع را درون یکدیگر پیادهسازی کردهایم.
1def outer_function():
2 def inner_function():
3 return "Hello from the inner function!"
4 return inner_function # Returns a function
عبارت return در پایتون همراه با بلاک finally
وقتی که عبارت return درون بلاک try-except اجرا شود، کد بلاک finally اول از همه قبل از برگرداندن مقدار به مرجع فراخوانی تابع اجرا میشود. توجه کنید که عبارت finally جزیی از بلاک try-except است. اگر این بخش در کد وجود داشت و کد در طول اجرا به عبارت return رسید، اول از همه کدهای مربوط به این بخش اجرا میشود. در واقع این بخش تنها بخشی است که هنگام برخورد فرایند اجرا به عبارت return میتواند قبل از خروج از تابع اجرا شود.
در کد زیر دو تابع جداگانه نوشتهایم که در هر دو تابع از بلاک try-except همراه با بخش finally استفاده کردهایم.
1def hello():
2 try:
3 return 'hello try'
4 finally:
5 print('finally block')
6
7
8def hello_new():
9 try:
10 raise TypeError
11 except TypeError as te:
12 return 'hello except'
13 finally:
14 print('finally block')
15
16
17print(hello())
18print(hello_new())
خروجی کد بالا به صورت زیر است.
finally block hello try finally block hello except
نکته: اگر بلاک مربوط به finally خود دارای عبارت return باشد، عبارت return که قبلا کد به آن برخورد کرده نادیده گرفته خواهد شد و مقداری که در بلاک finally در مقابل عبارت return تعبیه شده به خارج از تابع برگردانده خواهد شد.
در کد زیر نمونه این حالت استثنایی را پیادهسازی کردهایم.
1def hello():
2 try:
3 return 'hello try'
4 finally:
5 print('finally block')
6 return 'hello from finally'
7
8
9print(hello())
خروجی کد بالا به صورت زیر است.
finally block hello from finally
یادگیری پایتون همراه با اجرای پروژه های کاربردی
برای اینکه بتوانیم آموختههای خود را به صورت درونی نهادینه کنیم، بهترین روش اجرای پروژههای مربوط به دنیای واقعی است. حداقل باید بر روی پروژههایی کار کنیم که نسبت به پروژههای واقعی نزدیک و ملموس باشند. زبان برنامهنویسی پایتون به عنوان یک زبان سطح بالا تقریبا در اکثر حوزههای تولید نرم افزار قابل استفاده است. به همین ترتیب پروژههای متنوعی نیز برای این زبان برنامهنویسی قابل تعریف و پیادهسازی است. در این بخش چند مورد از فیلمهای آموزشی فرادرس را در ارتباط با یادگیری و تمرین پایتون به صورت پروژه محور معرفی کردهایم. با بررسی این پروژهها و معرفی دورهها میتوانید بهترین فیلم آموزشی را متناسب با علاقه و رشته تخصصی خودتان پیدا کنید.
- فیلم طراحی سایت و وب اپلیکیشن با فریمورک Django فرادرس
- فیلم آموزش مقدماتی ساخت ربات تلگرام با پایتون در فرادرس
- فیلم آموزش پیش بینی نارسایی قلبی با الگوریتم های یادگیری ماشین در پایتون فرادرس
- فیلم آموزش پروژه محور سی شارپ و پایتون، ساخت ربات اینستاگرام در فرادرس
- فیلم آموزش پروژه محور پایتون، ساخت بازی حافظه تصویری با کتابخانه Tkinter و Turtle در وبسایت فراردس
برای دیدن فیلمهای آموزشی بیشتر فرادرس به صورت پروژهمحور، چه در زبان برنامهنویسی پایتون و چه در سایر زبانهای برنامهنویسی، میتوانید روی عکس بالا کلیک کنید و به طور مستقیم به صفحه مجموعه آموزشهای پروژهمحور برنامهنویسی فرادرس منتقل شوید.
جمع بندی
مقدار return در هر تابع همان مقداری است که تابع بعد از پایان فرایند اجرا به محل فراخوانی تابع برمیگرداند. به عبارت دیگر، میتوانیم بگوییم که عبارت return ، آخرین عبارتی است که هر تابع یا متد قبل از خاتمه کارش اجرا میکند. در پایتون حتی میتوانیم تابعی را از درون تابع دیگری به بیرون برگردانیم. همچنین دانستیم تابعی که عبارت return ندارد یا تابعی که در مقابل عبارت return آن هیچ مقداری قرار نگرفته، به صورت پیشفرض، مقدار None برمیگرداند.
قطعا که عبارت return بخش ضروری از نوشتن توابع ارزشمند نیست. زیرا هدف اصلی ایجاد توابع، کپسولهسازی بلاکی از کد برای استفاده دوباره از آن در قسمتهای دیگر است. اما میتوان گفت که عبارت return مهمترین بخش در ایجاد توابع است. زیرا این عبارت تابع را کامل میکند و خوانایی تابع را افزایش میدهد. در این مطلب از مجله فرادرس، با عبارت return و انواع کاربردها و روشهای استفاده از آن آشنا شدیم. نسبت به مزیتهایی که این عبارت برای برنامهنویسی فراهم میکند شناخت پیدا کردیم و یاد گرفتیم که چگونه به بهترین روش ممکن با کمک عبارت return خوانایی و بهرهوری کد خود را افزایش دهیم. پس از این به بعد وقتی که در حال تعریف تابع بودید، بهجای استفاده از دستور print() سعی کنید از return استفاده کنید.