عند تعلم بايثون من الصفر، ستقابل قيمة مهمة جدًا اسمها None. قد تبدو في البداية غريبة، خصوصًا إذا ظننت أنها مثل False أو مثل الرقم 0 أو مثل النص الفارغ "".
لكن في الحقيقة، None لها معنى خاص في Python. فهي لا تعني رقمًا، ولا نصًا، ولا قيمة منطقية، بل تعني غالبًا أن المتغير لا يحتوي على قيمة حقيقية حتى الآن، أو أن الدالة لم ترجع نتيجة.
في هذا الدرس من سلسلة أساسيات بايثون على بايثون العرب، سنتعلم معنى None، ومتى نستخدمها، وما الفرق بينها وبين False و 0 والنص الفارغ، مع أمثلة عملية بسيطة مناسبة للمبتدئين.
{getToc} $title={محتوى المقال}
{alertInfo} قيمة None في بايثون تعني غالبًا: لا توجد قيمة حقيقية هنا حتى الآن.
ما معنى 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 أو النص الفارغ. صحيح أن هذه القيم قد تعتبر غير فعالة داخل شرط 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 أحيانًا؟
إذا كتبت دالة في بايثون ولم تستخدم داخلها 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
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.
روابط مهمة من بايثون العرب
- أساسيات بايثون 7: أنواع البيانات الأساسية Python Data Types
- أساسيات بايثون 14: شرح return في الدوال
- أساسيات بايثون 18: شرح Dictionaries في Python
- أوامر بايثون جاهزة للمبتدئين
- مشكلة وحل: حل خطأ NameError في بايثون
مصدر خارجي مفيد
يمكنك الرجوع إلى توثيق 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 للتعامل مع الأخطاء
لأننا بعد فهم القيم والأنواع والدوال أصبح من المناسب أن نبدأ في تعلم كيفية التعامل مع الأخطاء بدون أن يتوقف البرنامج فجأة.