• 0

مشكلة في المعامل is مع الأرقام أكبر من 256 في بايثون

لدي سؤال حول المعامل 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؟

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

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

 caches integer objects

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

 -5 .. 256 

معتمدةً على نموذج التصميم singleton أي جميع الأعداد الصحيحة ضمن ذلك المجال التي لها نفس القيمة ستشير لنفس الغرص فيكون نتيجة تقييم is تعطي true أما في الأعداد الكبيرة ستقوم بايثون بتوليد غرض مستقل لكل متغير/قيمة.

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن