در زمان یادگیری زبان برنامهنویسی پایتون یا هر زبان برنامهنویسی دیگری با عبارتی به نام 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
: مقدار یا متغیری که باید از درون تابع به خارج برگردانده شود. وجود این مقدار نیز اختیاری است.
چگونه در کار با زبان برنامه نویسی پایتون پیشرفت کنیم؟
برای اینکه بتوانیم مهارتهای خود را در کار با زبان برنامهنویسی پایتون افزایش بدهیم، باید مفاهیم و ابزارهای پایتون را به صورت عمیقتری بشناسیم و نسبت به ظرایف این زبان برنامهنویسی اطلاعات بیشتری کسب کنیم. کسب این اطلاعات صرفا از طریق مطالعه امری وقتگیر و گاهی بسیار مشکل است. برای یادگیری بهتر لازم است که بخش دیداری و شنیداری مغز ما نیز فعال شود. شرکت در کلاسهای برنامهنویسی نسبت به مطالعه صرف، گزینه بسیار بهتر و کارآمدتری است. اما پیدا کردن کلاس متناسب با شرایط ما از لحاظ مالی، علمی، رفتوآمد و زمانی نیز امری مشکل است. علاوه بر این برای مرور کلاسها هم معمولا چارهای جز مطالعه جزوهها وجود ندارد.
پس بهترین گزینه ممکن استفاده از فیلمهای آموزشی است. این فیلمهای آموزشی محدودیت زمانی و مکانی ندارند. قابل بازبینی مجدد به صورت بیشمار دفعه هستند و در عین حال از قوای یادگیری دیداری و شنیداری دانشجویان نیز کار میکشند. سایت آموزشی فرادرس یکی از بهترین تولید کنندههای فیلمهای اموزشی به زبان فارسی است. کیفیت آموزشهای بالا در کنار طبقهبندی آموزشها به سطوح علمی متفاوت هم گزینه دیگری است که باعث برجسته شدن فرادرس در بین همه دانشجویان شده است.
در این بخش چند مورد از فیلمهای آموزشی متناسب با سطح این مطلب را معرفی کردهایم. در صورتی که تمایل به دیدن فیلمهای بیشتر دارید میتوانید بر روی تصویر بالا کلیک کرده یا مستقیما به وبسایت فرادرس مراجعه کنید.
چه زمانی از عبارت 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 = "[email protected]"
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
یادگیری پایتون همراه با اجرای پروژه های کاربردی
برای اینکه بتوانیم آموختههای خود را به صورت درونی نهادینه کنیم، بهترین روش اجرای پروژههای مربوط به دنیای واقعی است. حداقل باید بر روی پروژههایی کار کنیم که نسبت به پروژههای واقعی نزدیک و ملموس باشند. زبان برنامهنویسی پایتون به عنوان یک زبان سطح بالا تقریبا در اکثر حوزههای تولید نرم افزار قابل استفاده است. به همین ترتیب پروژههای متنوعی نیز برای این زبان برنامهنویسی قابل تعریف و پیادهسازی است. در این بخش چند مورد از فیلمهای آموزشی فرادرس را در ارتباط با یادگیری و تمرین پایتون به صورت پروژه محور معرفی کردهایم. با بررسی این پروژهها و معرفی دورهها میتوانید بهترین فیلم آموزشی را متناسب با علاقه و رشته تخصصی خودتان پیدا کنید.
برای دیدن فیلمهای آموزشی بیشتر فرادرس به صورت پروژهمحور، چه در زبان برنامهنویسی پایتون و چه در سایر زبانهای برنامهنویسی، میتوانید روی عکس بالا کلیک کنید و به طور مستقیم به صفحه مجموعه آموزشهای پروژهمحور برنامهنویسی فرادرس منتقل شوید.
جمع بندی
مقدار return
در هر تابع همان مقداری است که تابع بعد از پایان فرایند اجرا به محل فراخوانی تابع برمیگرداند. به عبارت دیگر، میتوانیم بگوییم که عبارت return
، آخرین عبارتی است که هر تابع یا متد قبل از خاتمه کارش اجرا میکند. در پایتون حتی میتوانیم تابعی را از درون تابع دیگری به بیرون برگردانیم. همچنین دانستیم تابعی که عبارت return
ندارد یا تابعی که در مقابل عبارت return
آن هیچ مقداری قرار نگرفته، به صورت پیشفرض، مقدار None
برمیگرداند.
قطعا که عبارت return
بخش ضروری از نوشتن توابع ارزشمند نیست. زیرا هدف اصلی ایجاد توابع، کپسولهسازی بلاکی از کد برای استفاده دوباره از آن در قسمتهای دیگر است. اما میتوان گفت که عبارت return
مهمترین بخش در ایجاد توابع است. زیرا این عبارت تابع را کامل میکند و خوانایی تابع را افزایش میدهد. در این مطلب از مجله فرادرس، با عبارت return
و انواع کاربردها و روشهای استفاده از آن آشنا شدیم. نسبت به مزیتهایی که این عبارت برای برنامهنویسی فراهم میکند شناخت پیدا کردیم و یاد گرفتیم که چگونه به بهترین روش ممکن با کمک عبارت return
خوانایی و بهرهوری کد خود را افزایش دهیم. پس از این به بعد وقتی که در حال تعریف تابع بودید، بهجای استفاده از دستور print()
سعی کنید از return
استفاده کنید.
source