آشنایی با فانکشن‌هایی با مقادیر بازگشتی در زبان برنامه‌نویسی پایتون


در دنیای واقعی برخی مشاغل خدماتی بوده که به آن دسته از فعالیت‌هایی اشاره دارند که با انجام آن‌ها خدمتی به افراد جامعه ارائه می‌شود (برای مثال می‌توان مشاغلی همچون تعمیر لوازم برقی، مکانیکی، باغبانی، معلمی و پزشکی را نام برد.) و دستۀ دیگر مشاغل تولیدی هستند که حاصل کار این گروه تولید یک محصول و ارائۀ آن به مصرف‌کنندگان است (می‌توان در این زمینه فعالیت‌های مربوط به تولید پوشاک، مواد غذایی، خودرو، ساخت نرم‌افزارهای کاربردی و تولید بسیاری از محصولات و کالاهای مصرفی را نام برد.)

جالب است بدانید که در مورد فانکشن‌های زبان برنامه‌نویسی پایتون نیز می‌توانیم یک دسته‌بندی بدین صورت انجام دهیم به طوری که بعضی از فانکشن‌ها مشابه کارهای خدماتی بوده و به منظور انجام یکسری دستورات تعریف و فراخوانی می‌شوند و فانکشن‌هایی که در آموزش‌های گذشته تعریف کردیم همه از این دست بودند چرا که در زمان فراخوانی دستورات زیادی را اجرا کرده و با پایان یافتن دستورات داخل بدنه کارشان نیز تمام می‌شد اما در مقابل دسته‌ای دیگر از فانکشن‌ها را داریم که مشابه کارهای تولیدی عمل می‌کنند بدین معنی که در زمان فراخوانی یکسری دستورات را اجرا کرده و در نهایت داده‌ای تحویل برنامه می‌دهند که در اصطلاح برنامه‌نویسی به این کار Return کردن به معنای «باز گرداندن» یک داده گفته می‌شود.

برای تعریف فانکشن‌هایی که یک مقدار برمی‌گردانند از دستوری استفاده می‌کنیم که با کلمۀ کلیدی return آغاز می‌شود و در ادامه دیتای مد نظر را برای ریترن شدن ذکر می‌کنیم که دیتای ریترن‌شده می‌تواند انواع مختلفی داشته باشد که در ادامه برخی از آن‌ها را مورد بررسی قرار می‌دهیم.

یک فانکشن می‌تواند دیتای بازگشتی از نوع آبجکت داشته و هر نوع آبجکتی را ریترن کند به طوری که مثلاً آبجکت مذکور می‌تواند یک عدد صحیح مانند 4 یا یک استرینگ همچون «SokanAcademy» و یا آبجکتی از نوع بولین مانند True و یا هر نوع آبجکت دیگری باشد.

همان‌طور که اشاره کردیم، فانکشن‌ها قابلیت ریترن کردن هر نوع آبجکتی دارند که از همین روی می‌توانیم از متغیری که به یک آبجکت منتسب شده است هم به عنوان دادۀ ریترن‌شده در ادامۀ دستور return استفاده کنیم که بدین ترتیب در زمان فراخوانی فانکشن، آبجکت ارجاع داده‌شده به آن متغیر برگشت داده می‌شود.

همچنین استفاده از انواع مختلف عبارت‌ها نظیر عبارت‌های محاسباتی یا مقایسه‌ای به منظور ریترن شدن نتیجۀ آن در خروجی امکان‌پذیر است بدین معنی که برای مثال می‌توانیم به جای ذکر نام یک متغیر در ادامۀ کیورد return که یک عملیات محاسباتی همچون (2 ** 6) / 15 بدان منتسب شده است، مستقیماً عبارت مذکور را به دنبال کیورد return وارد کنیم که نتیجۀ حاصل از آن در خروجی ریترن شود.

به علاوه اینکه نتیجۀ ریترن‌شده از یک فانکشن نیز می‌تواند به عنوان داده‌ای برای فانکشن دیگری در ادامۀ دستور return آن بیاید که برای مثال فانکشنی تحت عنوان ()getArgsNumber را در ادامه آورده‌ایم که قابلیت دریافت آرگومان ورودی به تعداد دلخواه را دارا است چرا که کاراکتر * قبل از پارامتر ورودی قرار گرفته و در آن گفته‌ایم در صورت فراخوانی، تعداد آرگومان‌های ورودی به فانکشن را در خروجی ریترن کند:

def getArgsNumber(*var_arg):
    return len(var_arg)

همان‌طور که ملاحظه می‌کنید، در هر نوبت فراخوانی فانکشن ()getArgsNumber دستور return تعداد آرگومان‌های داده‌شده به فانکشن را در خروجی برمی‌گرداند.

به خاطر داشته باشید
وقتی فانکشنی فراخوانی می‌شود، دستورات داخل بدنۀ آن اجرا شده و به محض رسیدن به دستور ریترن کار فانکشن مذکور به پایان می‌رسد و آبجکتی در خروجی بازگردانده شده و سایر دستورات بدنه پس از دستور ریترن توسط مفسر پایتون نادیده گرفته شده و اجرا نمی‌شوند.

به طور کلی، آبجکت ریترن‌شده از یک فانکشن‌ را می‌توان مانند سایر آبجکت‌ها در بخش‌های مختلف برنامه مورد استفاده قرار داد که برای این منظور تنها نیاز است تا فانکشن را فراخوانی کنیم. در همین راستا، مثالی دیگر در رابطه با نحوۀ تعریف و فراخوانی این نوع فانکشن‌ها آورده‌ایم:

def doAdd(Value1, Value2):
    return Value1 + Value2
print("7 + 10 =", doAdd(7, 10)) # doAdd adds two Integers.
print("Welcome to", doAdd("Sokan", "Academy"),"!") # doAdd concatenates two Strings.

در کد فوق، فانکشنی به نام ()doAdd تعریف کرده‌ایم که این وظیفه را دارا است تا عملگر + را روی دو آرگومان ورودی‌اش اِعمال کند و نتیجه را در خروجی ریترن کند و در ادامه آبجکت ریترن‌شده را به عنوان آرگومان ورودی به فانکشن ()print داده‌ایم که نتیجه نهایی را به همراه استرینگ‌های متناظرش در خروجی چاپ می‌کند. جهت تست، اسکریپت فوق را در فایلی به نام ReturnFunc.py ذخیره کرده و آن را اجرا می‌کنیم که خروجی حاصل از آن بدین ترتیب خواهد بود:

7 + 10 = 17
Welcome to SokanAcademy !

همان‌طور که می‌بینید، با استفاده از دستور return در بدنۀ فانکشن آبجکتی در قالب حاصل‌جمع آرگومان‌های ورودی ریترن شده است که این آبجکت را در سایر دستورات برنامه و به عنوان آرگومان ورودی به فانکشن ()print داده‌ایم.

دانلود فایل‌های تمرین

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
محسن
محسن
۱۳۹۷/۰۱/۰۸
اما یکی از استفاده های پرکاربرد return وقتی هست که ما میخوایم نتیجه حاصل از اجرای یک تابع A رو به عنوان ورودی بفرستیم به تابع B و بازم روش یه کار دیگه انجام بدیم،مثلا

def welcome(value1):
welcome_sentence = "Hello "+value1
return welcome_sentence

def greeting(value2):
return welcome(value2) + ", How are you?"

user = input('Enter your name: ')
print(greeting(user))

اینجا ما اسم کاربر رو می گیریم،میریزیم داخل متغیر user بعدش می فرستیم به تابع greeting
این تابع هر ورودی رو با اسم value2 میشناسه،اما نکته اینجاست،قبل از اینکه هر کاری رو وروردیش انجام بده اول اونو با
welcome(value2)
می فرسته به یه تابع دیگه با اسم welcome که تو قسمت قبل دیدیم نتیجه اجرای تابع welcome که با return میاد بیرون اینه که یه Hello به اسم اضافه می کنه
یعنی اگه من تا اینجا به برنامه اسمم رو گفته باشم mohsen، نتیجه کار تا اینجا شده Hello mohsen
خب خود تابع greeting هم به چیزی که تا اینجا آماده شده یک ", How are you?" اضافه می کنه یعنی نتیجه اجرای این تابع میشه
Hello mohsen, How are you?
که خب با print تو خروجی چاپ میشه،امیدوارم تونسته باشم خوب توضیحش بدم
این ارتباط تابع ها میتونه خیلی بیشتر و تو در توتر و پیچیده تر که اونجا نقش return پررنگ تر میشه
amir.hosein.ka
amir.hosein.ka
۱۳۹۷/۰۱/۰۸
از ریترن هیچی نفهمیدم
کاربر میهمان
کاربر میهمانمن یک کاربر مهمان هستم
۱۳۹۶/۰۷/۱۰
ببخشید من تازه کارم ریترن با دستور چاپ دقیقا چه فرق میکنه؟؟
moohi58
moohi58
۱۳۹۵/۱۰/۳۰
راهی هست که یک متغیرو از تابع بیرون بیاریم؟(با همون اسم و به جز این کد:
def a():
.
.
.
return n

n=a()
Mrj
Mrj
۱۳۹۵/۰۶/۰۸
با عرض سلام و خسته نباشید.
لطفا اگه امکان داره اون مورد >>به خاطر داشته باشید<< رو با مثال توضیح بدید.
ممنون.
farshid
farshid
۱۳۹۵/۰۲/۲۰
با سلام و تشکر بابت آموزش خوبتون
چرا بعد از اجرای این دستور خروجی درست نمی دهد؟
def getArgsNumber(*var_arg):
return len(var_arg)

به این صورت که اگر فانکشن را خالی فراخوانی کنیم صفر برمیگرداند که درست است ولی اگر استرینگ یا عدد صحیح وارد کنیم بدون توجه به تعداد کاراکترها عدد 1 را بر می گرداند