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


در آموزش قبل با دستور return آشنا شدیم و دیدیم که اگر این دستور به همراه نام آبجکت مد نظر در بدنۀ فانکشنی به کار رود، پس از فراخوانی مقدار آبجکت مذکور را در خروجی برمی‌گرداند و سایر فانکشن‌هایی که فاقد دستور return هستند هیچ مقداری را برنمی‌گردانند اما واقعیت امر آن است که تمامی فانکشن‌ها در صورت فراخوانی آبجکتی را ریترن می‌کنند. در حقیقت، فانکشن‌هایی که فاقد دستور return هستند، آبجکتی تحت عنوان None که متعلق به کلاس NoneType است را برمی‌گردانند که هیچ مقداری ندارد و می‌توان گفت که تنها نمونه از نوع دادۀ NoneType است.

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

>>> Spam = None
>>> Spam

>>>

همان‌طور که می‌بینید، متغیری به نام Spam را به آبجکت None منتسب کرده‌ایم و در سطر بعد گفته‌ایم مقدار اختصاص‌یافته به این متغیر در خروجی نمایش داده شود و همان‌طور که انتظار می‌رود، شاهد مقداری خالی هستیم. در حقیقت، آبجکت None نشان‌دهندۀ نبودِ یک آبجکت و تنها نمونه‌ای از کلاس NoneType است و در سایر زبان‌های برنامه‌نویسی این آبجکت معادل null یا nill و در برخی زبان‌های برنامه‌نویسی نیز معادل undefined است. همچنین زبان برنامه‌نویسی پایتون نسبت به بزرگ و کوچک بودن حروف حساس است و از همین روی کیورد None نیز مانند کیوردهای True و False و موارد مشابه آن با حرف بزرگ آغاز می‌شود.

در ادامه و به منظور درک بهتر مفهوم مقادیر بازگشتی از نوع None مثال زیر را مد نظر قرار می‌دهیم:

>>> Spam = print("This Is Spam.")
This Is Spam.
>>> Spam == None
True

در کد فوق، ابتدا فانکشن ()print را فراخوانی کرده‌ایم و استرینگ «.This Is Spam» را به عنوان آرگومان ورودی به آن داده‌ایم و در ادامه مقدار ریترن‌شده از این فانکشن را به متغیری تحت عنوان Spam منتسب کردیم. سپس با به‌کارگیری اپراتور == بررسی می‌کنیم ببینیم که آیا مقدار منتسب به متغیر Spam با None برابر است یا خیر که پاسخ True در خروجی نمایش داده می‌شود و از همین روی می‌توان گفت که فانکشن ()print و فانکشن‌های مشابهی که فاقد دستور return هستند، صرفاً یکسری دستورات را اجرا کرده و مقداری را برنمی‌گردانند و تنها یک آبجکت None (خالی) را در خروجی ریترن می‌کنند. 

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


لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
احسانمن یک کاربر مهمان هستم
۱۳۹۷/۱۲/۲۱
من با متد sort یک لیست رو مرتب کردم ولی مقدار none برمیگردونه. کسی میدونه علتش چیه؟؟
kalematijavad
kalematijavad
۱۳۹۷/۱۲/۰۴
خیلی ساده و روان درس میدهید .... بسیار ممنون
mahdisms2020
mahdisms2020
۱۳۹۷/۰۵/۲۵
با سلام. متاسفانه من نوز دلیل برابری شون رو متوجه نشدم
Mrj
Mrj
۱۳۹۵/۰۶/۰۸
با عرض سلام و خسته نباشید.
من نفهمیدم چرا فانکیشن spam و None با یکدیگر بربرند ؟