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


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

جالب است بدانید که در مورد فانکشن های زبان برنامه نویسی پایتون نیز می توانیم یک دسته بندی به این صورت انجام دهیم. بعضی از فانکشن ها مشابه کارهای خدماتی هستند، به عبارت دیگر آن ها را تعریف می کنیم تا در زمان فراخوانی صرفاً یک سری دستورات را اجرا کنند. فانکشن هایی که در آموزش های قبل تعریف کردیم همه از این دست بودند چرا که این فانکشن ها در زمان فراخوانی، دستورات زیادی را اجرا می کنند و با پایان یافتن دستورات داخل بدنه ی آن ها کارشان تمام می شود. در مقابل دسته ای دیگر از فانکشن ها قرار دارند که مشابه کارهای تولیدی عمل می کنند، به این صورت که در زمان فراخوانی، یک سری از دستورات را اجرا می کنند و در نهایت یک داده را تحویل برنامه می دهند که در اصطلاح برنامه نویسی به این کار "باز گرداندن" یک داده گفته می شود. تصمیم گیری در مورد این که یک فانکشن را به چه صورت تعریف کنیم به این موضوع بستگی دارد که قرار است آن فانکشن چه کاری را انجام دهد. در این آموزش با فانکشن هایی که یک مقدار را برمی گردانند و نحوه ی تعریف آن ها آشنا خواهیم شد.

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

یک آبجکت: یک تابع می تواند هر نوع آبجکتی را برگرداند، برای مثال این آبجکت می تواند یک عدد صحیح مانند 4 یا یک آبجکت استرینگی مانند "SokanAcademy.com" و یا یک آبجکت بولینی مانند Ture و یا هر نوع آبجکت تعریف شده ی دیگر باشد.

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

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

مقدار برگشت داده شده توسط سایر فانکشن ها: آبجکتی که یک فانکشن برمی گرداند می تواند به عنوان یک داده برای فانکشن دیگری در ادامه ی دستور return آن بیاید. برای مثال می دانیم که فانکشن ()len یک دنباله را به عنوان آرگومان ورودی می گیرد و طول آن را برمی گرداند. در مثال زیر از مقدار برگشت داده شده توسط این فانکشن برای برگرداندن تعداد پارامترهای ورودی فانکشن ()getArgsNumber استفاده می کنیم:

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

بر اساس آموزش های قبلی، می دانیم که فانکشن ()getArgsNumber می تواند به تعداد دلخواه آرگومان بگیرد چرا که یک علامت * قبل از آرگومان ورودی قرار گرفته است. در هر نوبت فراخوانی، دستور return تعداد آرگومان های داده شده به فانکشن را بر می گرداند.

از آبجکتی که یک فانکشن برمی گرداند می توانیم در هر بخش از برنامه مانند سایر آبجکت ها استفاده کنیم، برای استفاده از آن، تنها نیاز است که فانکشن را فراخوانی کنیم. اکنون در قالب یک مثال دیگر نحوه ی تعریف و فراخوانی این نوع فانکشن ها را می بینیم. در برنامه ی زیر، فانکشنی با نام doAdd تعریف می کنیم که وظیفه ی آن این است که عملگر + را روی دو آرگومانی که می گیرد اثر دهد و نتیجه را بر گرداند. در ادامه از آبجکتی که این فانکشن برمی گرداند به عنوان آرگومان دستور پرینت استفاده می کنیم.

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.

اسکریپت این برنامه را در فایل ReturnFunc.py ذخیره می کنیم. خروجی حاصل از اجرای این برنامه به صورت زیر است:

7 + 10 = 17
Welcome to SokanAcademy !

همان طور که می بینید با استفاده از دستور return در بدنه ی تابع می توان یک آبجکت را برگرداند و از آن در سایر دستورات برنامه استفاده کرد.

به خاطر داشته باشید
در زمان فراخوانی یک فانکشن، به محض آن که دستور return اجرا می شود کار فانکشن به پایان می رسد و فانکشن یک آبجکت را برمی گرداند. در این حالت اگر دستورات دیگری در ادامه ی دستور return در بدنه ی تابع آمده باشند، توسط مفسر پایتون نادیده گرفته می شوند و اجرا نخواهند شد.
دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
کاربر میهمان
ببخشید من تازه کارم ریترن با دستور چاپ دقیقا چه فرق میکنه؟؟
moohi58
moohi58
راهی هست که یک متغیرو از تابع بیرون بیاریم؟(با همون اسم و به جز این کد:
def a():
.
.
.
return n

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

به این صورت که اگر فانکشن را خالی فراخوانی کنیم صفر برمیگرداند که درست است ولی اگر استرینگ یا عدد صحیح وارد کنیم بدون توجه به تعداد کاراکترها عدد 1 را بر می گرداند
نرگس اسدی
نرگس اسدی
سلام
علت مشخصه. چون دستور return در این فانکشن تعداد آرگومان هارا بر می گردونه نه طول آن ها را. یعنی فرقی نداره که استرینگ "A" که یک کاراکتر داره یا "ABC" که از سه کاراکتر تشکیل شده را بدید. چون در هر صورت یک آرگومان به تابع دادید و مقدار برگشتی 1 است.

در پاسخ به

farshid
farshid
ممنون

در پاسخ به

فردی
فردی
سلام. میشه لطفا توضیح بدید فراخوانی شما در اینجا چطور بوده. یعنی لطفا خطهای دیگه برنامتون هم بگید.

در پاسخ به