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

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

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

جالب است بدانید که در مورد فانکشن‌های زبان برنامه‌نویسی پایتون نیز می‌توانیم یک دسته‌بندی بدین صورت انجام دهیم به طوری که بعضی از فانکشن‌ها مشابه کارهای خدماتی بوده و به منظور انجام یکسری دستورات تعریف و فراخوانی می‌شوند و فانکشن‌هایی که در آموزش‌های گذشته تعریف کردیم همه از این دست بودند چرا که در زمان فراخوانی دستورات زیادی را اجرا کرده و با پایان یافتن دستورات داخل بدنه کارشان نیز تمام می‌شد اما در مقابل دسته‌ای دیگر از فانکشن‌ها را داریم که مشابه کارهای تولیدی عمل می‌کنند بدین معنی که در زمان فراخوانی یکسری دستورات را اجرا کرده و در نهایت داده‌ای تحویل برنامه می‌دهند که در اصطلاح برنامه‌نویسی به این کار 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 داده‌ایم.

online-support-icon