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


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

>>> spam = None
>>> spam
>>>

همان طور که می بینید متغیر spam به آبجکت None منتسب شده است و با فراخوانی آن هیچ مقداری نمایش داده نمی شود. در حقیقت None آبجکتی است که نشان دهنده ی عدم وجود یک آبجکت و تنها نمونه یی از کلاس NoneType است (در سایر زبان های برنامه نویسی این آبجکت null، nil، یا undefined نامیده می شود.) همان طور که قبلاً گفتیم، زبان برنامه نویسی Python نسبت به حالت حروف حساس است و کیورد None نیز مانند کیوردهای True و False و ... تنها با حرف بزرگ آغاز می شود. اجازه دهید ببینیم که فانکشنی مانند پرینت چه مقداری را برمی گرداند:

>>> spam = print("This is spam")
This is spam
>>> spam == None
True

در کدهای بالا، ابتدا متغیر spam را به مقدار برگشت داده شده توسط فانکشن پرینت که در این جا با آرگومان "This is spam" فراخوانی شده است، منتسب کردیم. سپس با یک دستور مقایسه ای (==) بررسی می کنیم که آیا مقدار متغیر spam با None برابر است یا خیر، که می بینید پاسخ True (درست) است، پس فانکشن پرینت و فانکشن های مشابه آن یک آبجکت None را برمی گردانند.

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

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
Mrj
Mrj
۱۳۹۵/۰۶/۰۸
با عرض سلام و خسته نباشید.
من نفهمیدم چرا فانکیشن spam و None با یکدیگر بربرند ؟
محمد رازانی
محمد رازانی
۱۳۹۵/۰۸/۰۳
درود بر شما. در متغیر اسپم فانکشن print گذارده شده که نتیجه برگشتی ان از نوع nonetype هست به این دلیل هست که با none برابر هست

در پاسخ به