أساسيات بايثون 21: شرح None في Python والفرق بينها وبين False و 0

أساسيات بايثون 21 شرح None في Python للمبتدئين والفرق بينها وبين False و 0

عند تعلم بايثون من الصفر، ستقابل قيمة مهمة جدًا اسمها None. قد تبدو في البداية غريبة، خصوصًا إذا ظننت أنها مثل False أو مثل الرقم 0 أو مثل النص الفارغ "".

لكن في الحقيقة، None لها معنى خاص في Python. فهي لا تعني رقمًا، ولا نصًا، ولا قيمة منطقية، بل تعني غالبًا أن المتغير لا يحتوي على قيمة حقيقية حتى الآن، أو أن الدالة لم ترجع نتيجة.

في هذا الدرس من سلسلة أساسيات بايثون على بايثون العرب، سنتعلم معنى None، ومتى نستخدمها، وما الفرق بينها وبين False و 0 والنص الفارغ، مع أمثلة عملية بسيطة مناسبة للمبتدئين.

{getToc} $title={محتوى المقال}

{alertInfo} قيمة None في بايثون تعني غالبًا: لا توجد قيمة حقيقية هنا حتى الآن.

شرح معنى None في Python عندما لا يحتوي المتغير على قيمة حقيقية

ما معنى None في Python؟

القيمة None في بايثون تستخدم للتعبير عن عدم وجود قيمة. بمعنى آخر، عندما تريد إنشاء متغير لكنك لا تريد وضع قيمة فعلية فيه الآن، يمكنك استخدام None.

مثال:

user_name = None

print(user_name)

الناتج:

None

هنا المتغير user_name موجود، لكنه لا يحتوي على اسم حقيقي بعد. لذلك وضعنا له القيمة None مؤقتًا.

هل None نوع بيانات في بايثون؟

نعم، None لها نوع خاص في بايثون اسمه NoneType. ويمكنك التأكد من ذلك باستخدام الدالة type().

value = None

print(type(value))

الناتج:

<class 'NoneType'>

هذا يعني أن None ليست مجرد كلمة عادية، بل قيمة خاصة معروفة داخل لغة Python.

{alertSuccess} عندما ترى NoneType في الناتج، فهذا يعني أن القيمة الموجودة هي None.

متى نستخدم None في بايثون؟

تستخدم None في مواقف كثيرة، ومن أشهرها:

  • عندما تريد إنشاء متغير بدون قيمة مؤقتًا.
  • عندما لا تجد نتيجة مناسبة من عملية معينة.
  • عندما ترجع الدالة بدون استخدام return.
  • عندما تريد التحقق هل تم تحديد قيمة أم لا.

مثال على متغير ينتظر قيمة لاحقًا:

selected_item = None

selected_item = "Python Book"

print(selected_item)

الناتج:

Python Book

في البداية لم تكن هناك قيمة محددة، ثم وضعنا قيمة لاحقًا.

الفرق بين None و False و 0 والنص الفارغ

مقارنة بين None و False و 0 والنص الفارغ في Python للمبتدئين

من الأخطاء الشائعة عند المبتدئين الاعتقاد أن None تساوي False أو 0 أو النص الفارغ. صحيح أن هذه القيم قد تعتبر غير فعالة داخل شرط if، لكنها ليست نفس الشيء.

القيمة معناها نوعها
None لا توجد قيمة NoneType
False قيمة منطقية تعني خطأ bool
0 رقم صحيح قيمته صفر int
"" نص فارغ str
[] قائمة فارغة list

جرب هذا المثال:

print(None == False)
print(None == 0)
print(None == "")

الناتج:

False
False
False

إذن None ليست مساوية لهذه القيم، حتى لو كانت جميعها قد تتصرف كقيمة غير صحيحة داخل الشرط.

هل None تعتبر False داخل if؟

نعم، عند استخدام None داخل شرط if، تتعامل معها بايثون كقيمة غير صحيحة.

result = None

if result:
    print("توجد نتيجة")
else:
    print("لا توجد نتيجة")

الناتج:

لا توجد نتيجة

لكن انتبه: هذا لا يعني أن None تساوي False. هي فقط تتصرف كقيمة غير صحيحة داخل الشرط.

{alertWarning} لا تخلط بين أن None تتصرف كقيمة False داخل if، وبين أنها تساوي False. هما ليستا نفس القيمة.

الطريقة الصحيحة للتحقق من None

الطريقة الأفضل للتحقق هل القيمة هي None أم لا هي استخدام is وليس ==.

value = None

if value is None:
    print("القيمة غير موجودة")

الناتج:

القيمة غير موجودة

وإذا أردت التأكد أن القيمة ليست None، استخدم is not.

name = "Ali"

if name is not None:
    print("الاسم موجود")

الناتج:

الاسم موجود
{alertSuccess} استخدم is None و is not None عند فحص قيمة None، فهذه هي الطريقة الأوضح والأفضل في بايثون.

لماذا ترجع الدالة None أحيانًا؟

مثال يوضح أن الدالة في Python ترجع None إذا لم تستخدم return

إذا كتبت دالة في بايثون ولم تستخدم داخلها return، فإنها ترجع None تلقائيًا.

مثال:

def say_hello():
    print("Hello")

result = say_hello()

print(result)

الناتج:

Hello
None

قد تتساءل: لماذا ظهرت None؟ السبب أن الدالة طبعت كلمة Hello، لكنها لم ترجع قيمة باستخدام return.

الفرق بين print و return مع None

الدالة print() تعرض نتيجة على الشاشة فقط، أما return فهي ترجع قيمة يمكن تخزينها واستخدامها لاحقًا.

دالة تطبع فقط وترجع None

def add(a, b):
    print(a + b)

result = add(5, 3)

print(result)

الناتج:

8
None

دالة ترجع قيمة باستخدام return

def add(a, b):
    return a + b

result = add(5, 3)

print(result)

الناتج:

8

في المثال الأول، الدالة طبعت النتيجة لكنها لم ترجعها، لذلك كانت قيمة result هي None. في المثال الثاني، استخدمنا return، لذلك تم حفظ الناتج داخل المتغير.

استخدام None كقيمة افتراضية

يمكن استخدام None كقيمة افتراضية داخل الدوال عندما لا يرسل المستخدم قيمة معينة.

def welcome(name=None):
    if name is None:
        print("أهلا بك")
    else:
        print("أهلا بك", name)

welcome()
welcome("Ahmed")

الناتج:

أهلا بك
أهلا بك Ahmed

هذا الاستخدام شائع ومفيد؛ لأن الدالة تستطيع التعامل مع حالتين: وجود قيمة أو عدم وجودها.

مثال عملي: البحث عن عنصر داخل قائمة

لنفترض أننا نريد البحث عن اسم داخل قائمة. إذا وجدنا الاسم نرجعه، وإذا لم نجده نرجع None.

def find_name(names, target):
    for name in names:
        if name == target:
            return name

    return None

students = ["Ali", "Sara", "Omar"]

result = find_name(students, "Mona")

if result is None:
    print("الاسم غير موجود")
else:
    print("تم العثور على الاسم:", result)

الناتج:

الاسم غير موجود

هذا مثال ممتاز لفهم الاستخدام العملي لـ None: عندما لا توجد نتيجة، نستخدم None بدل اختراع قيمة غير واضحة.

أخطاء شائعة عند استخدام None

ملخص أخطاء شائعة عند استخدام None في بايثون وحلولها للمبتدئين

1. كتابة none بحروف صغيرة

في بايثون يجب كتابة None بحرف كبير في البداية. كتابة none خطأ.

value = none

الكود الصحيح:

value = None

2. استخدام = بدل is عند الفحص

علامة = تستخدم للإسناد، وليست للمقارنة.

if value = None:
    print("لا توجد قيمة")

الصحيح:

if value is None:
    print("لا توجد قيمة")

3. الخلط بين None والنص الفارغ

النص الفارغ "" يعني أن هناك نصًا لكنه فارغ، أما None فتعني عدم وجود قيمة أصلًا.

name1 = ""
name2 = None

print(name1 == name2)

الناتج:

False

جدول مختصر لفهم None

السؤال الإجابة المختصرة
ما معنى None؟ تعني عدم وجود قيمة حقيقية.
هل None تساوي False؟ لا، لكنها تتصرف كقيمة غير صحيحة داخل if.
ما نوع None؟ NoneType
كيف أفحص None؟ باستخدام is None
لماذا ترجع الدالة None؟ لأنها لا تحتوي على return.
هل None مثل النص الفارغ؟ لا، النص الفارغ قيمة نصية، أما None فتعني عدم وجود قيمة.

أسئلة شائعة

ما معنى None في بايثون؟

تعني None أن القيمة غير موجودة أو لم يتم تحديدها بعد. وهي قيمة خاصة في Python وليست مثل 0 أو False.

هل None تساوي False؟

لا. None لا تساوي False، لكنها تتعامل كقيمة غير صحيحة داخل جملة if.

ما الفرق بين None و 0؟

الرقم 0 هو قيمة رقمية، أما None فتعني عدم وجود قيمة. لذلك هما ليسا نفس الشيء.

لماذا تظهر None عند طباعة نتيجة دالة؟

تظهر None غالبًا عندما تستدعي دالة لا تحتوي على return، لأن الدالة في هذه الحالة ترجع None تلقائيًا.

هل أستخدم == None أم is None؟

الأفضل في بايثون استخدام is None للتحقق من قيمة None، واستخدام is not None للتأكد أن القيمة ليست None.

روابط مهمة من بايثون العرب

مصدر خارجي مفيد

يمكنك الرجوع إلى توثيق Python الرسمي للتعرف أكثر على القيم والثوابت الخاصة في اللغة: Python Documentation - None.

الخلاصة

قيمة None من الأساسيات المهمة في بايثون، ومعناها ببساطة أن القيمة غير موجودة أو لم يتم تحديدها بعد. وهي ليست مثل False، وليست مثل 0، وليست مثل النص الفارغ.

تذكر أهم النقاط:

  • None تعني عدم وجود قيمة.
  • نوعها هو NoneType.
  • الدالة التي لا تستخدم return ترجع None.
  • الأفضل فحصها باستخدام is None و is not None.
  • لا تخلط بينها وبين False أو 0 أو النص الفارغ.
{alertSuccess} القاعدة الذهبية: استخدم None عندما تريد التعبير بوضوح عن عدم وجود قيمة، واستخدم is None عند فحصها.

المقال المقترح التالي

بعد هذا الدرس، أقترح أن يكون المقال التالي في سلسلة أساسيات بايثون:

أساسيات بايثون 22: شرح Try و Except في Python للتعامل مع الأخطاء

لأننا بعد فهم القيم والأنواع والدوال أصبح من المناسب أن نبدأ في تعلم كيفية التعامل مع الأخطاء بدون أن يتوقف البرنامج فجأة.

إرسال تعليق

أحدث أقدم