اذهب إلى المحتوى
  • 0

كيفية إستخدام is و is not

السؤال

Recommended Posts

  • 0
نشر

تستخدم is و is not في لغة بايثون للتحقق من الهوية (Identity) أي للتأكد مما إذا كان المتغيران يشيران إلى نفس الكائن (Object) في الذاكرة وليس فقط إذا كانت قيمهما متساوية.

أولا بالنسبة لاستخدام is فإنه تكون النتيجة True فقط إذا كان المتغيران يشيران إلى نفس العنوان في الذاكرة :

list1 = [1, 2, 3]
list2 = [1, 2, 3]
list3 = list1

print(list1 == list2) # True (لأن القيم متساوية)
print(list1 is list2) # False (لأن كل قائمة مخزنة في مكان مختلف في الذاكرة)
print(list1 is list3) # True (لأن list3 تشير إلى نفس مكان list1)

ثانيا استخدام is not وهي عكس is تماما وتستخدم للتأكد من أن كائنين لا يشغلان نفس العنوان :

x = [10]
y = [10]

if x is not y:
    print("لهما نفس القيمة ولكن في أماكن مختلفة")

والاستخدام الأكثر شيوعا ل is و is not هو عند المقارنة مع القيم الخاصة مثل None أو القيم المنطقية True و False.

user_data = None

if user_data is None:
    print("None")

# if user_data == None: (هذه تعمل لكنها غير مفضلة في بايثون)

 

  • 0
نشر

السلام عليكم ورحمة الله تعالى وبركاته،

عاملا المقارنة is و is not  في Python لا يقارنان القيمة بل يقارنان هوية الكائن في الذاكرة أي هل المتغيران يشيران إلى نفس الكائن تماما أم لا فمثلا إذا كتبت a is b فهذا يعني:

  • "هل a و b يشيران إلى نفس الكائن في الذاكرة؟"

وليس:

  • "هل قيمتاهما متساويتان؟"

والاستخدام الأكثر شيوعا وصحة لهما هو المقارنة مع None إذ يكتب:

  • if x is None

أو:

  • if x is not None

بدلا من:

  • ==

لأن None كائن وحيد في Python أما مقارنة الأعداد أو النصوص أو القوائم فيجب أن تتم باستخدام == و != لأن is قد يعطي نتائج غير متوقعة بسبب آلية تخزين Python الداخلية.

  • 0
نشر

المعاملان is و is not في بايثون هما معاملا مقارنة هوية يتحققان مما إذا كان متغيران يشيران إلى نفس الكائن في الذاكرة عبر id() وليس لمقارنة القيم كما تفعل == و != فمثلا a = [1,2,3] و b = [1,2,3] تجعل a == b ترجع True لتطابق القيم لكن a is b سترجع False لأنهما كائنان منفصلان بينما بعد b = a تصبح a is b وترجع True لأنهما يشيران لنفس الكائن.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...