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

السؤال

نشر

لدي سؤال حول المعامل is والذي يستخدم للتأكد من قيمة ونوع قيمتين حيث أن المقارنة بين متغيرين لهما نفس القيمة الرقمية (أقل من أو يساوي 256) يعطي True بينما المفارنة بين قيمتين أكبر من 256 يعطي False كالتالي:

x = 5
y = 5
print(x is y)	# Output: True

x = 300
y = 300
print(x is y)	# Output: False

أنا أستخدم بايثون 3.8 ، لا أعلم سبب هذه المشكلة لكنها قد تسبب أخطاء غير متوقعة في تنفيذ البرامج لدي، وكيف أقوم بالمقارنة بين قيمتين من نفس النوع إن لم أستخدم المعامل is؟

Recommended Posts

  • 1
نشر

سبب هذا أن is تتأكد أن طرفي المقارنة يشيران لنفس الغرض في الذاكرة وإن بايثون لتحسين الأداء تقوم بعمل

 caches integer objects

للأعداد الصحيحة الصغيرة:

 -5 .. 256 

معتمدةً على نموذج التصميم singleton أي جميع الأعداد الصحيحة ضمن ذلك المجال التي لها نفس القيمة ستشير لنفس الغرص فيكون نتيجة تقييم is تعطي 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...