5.0 KiB
title | localeTitle |
---|---|
Python Comparisons | مقارنات بايثون |
هناك ثماني عمليات مقارنة في بايثون. لديهم جميعا نفس الأولوية (وهو أعلى من العمليات المنطقية). يمكن مقارناته بشكل تعسفي. على سبيل المثال ، x < y <= z
مكافئ x < y and y <= z
، فيما عدا أنه يتم تقييم y
مرة واحدة فقط (ولكن في الحالتين z
لا يتم تقييمه على الإطلاق عند x < y
تم العثور على false).
يلخص هذا الجدول عمليات المقارنة:
العملية | المعنى
--------- | -----------------------
<
| بدقة أقل من
<=
| اقل او يساوي >
| بدقة أكبر من >=
| أكبر من أو يساوي ==
| يساوي !=
| لا تساوي is
| هوية الكائن
is not
هوية الكائن المنسوخة
كائنات من أنواع مختلفة ، باستثناء أنواع رقمية مختلفة ، أبدا مقارنة على قدم المساواة. علاوة على ذلك ، فإن بعض الأنواع (على سبيل المثال ، كائنات الدالة) تدعم فقط مفهومًا متدليًا للمقارنة حيث يكون أي جسمين من هذا النوع غير متساويين. ستقوم عوامل <
، <=
، >
و >=
برفع استثناء TypeError
عند مقارنة رقم مركب بنوع رقمي مدمج آخر ، عندما تكون الكائنات من أنواع مختلفة لا يمكن مقارنتها ، أو في حالات أخرى حيث لا يوجد تعريف ترتيب.
عادةً ما تقارن المثيلات غير المتطابقة لفئة ما بأنها غير متساوية ما لم يعرّف الفصل الأسلوب __eq__()
.
لا يمكن ترتيب مثيلات الفئة فيما يتعلق __lt__()
الأخرى من نفس الفئة ، أو أنواع أخرى من الكائنات ، ما لم يحدد الفصل ما يكفي من الأساليب __lt__()
و __le__()
و __gt__()
و __ge__()
(بشكل عام و __lt__()
و __eq__()
كافية ، إذا كنت تريد المعنى التقليدي لمشغلي المقارنة).
سلوك is
و is not
المشغلين لا يمكن تخصيص. كما يمكن تطبيقها على أي جسمين ولا تثير استثناء.
يمكننا أيضا سلسلة <
و >
المشغلين معا. على سبيل المثال ، 3 < 4 < 5
سيعود True
، لكن 3 < 4 > 5
لن. يمكننا أيضا سلسلة مشغل المساواة. على سبيل المثال ، 3 == 3 < 5
سيعود True
ولكن 3 == 5 < 5
لن.
مقارنات المساواة - "is" vs "=="
في بايثون ، هناك نوعان من عوامل المقارنة التي تسمح لنا بالتحقق من وجود كائنين متساويين. المشغل is
و ==
المشغل. ومع ذلك ، هناك فرق رئيسي بينهما!
يمكن تلخيص الفرق الرئيسي بين "is" و "==" على النحو التالي:
is
يستخدم لمقارنة الهوية==
يستخدم لمقارنة المساواة
مثال
أولا ، إنشاء قائمة في بيثون.
myListA = [1,2,3]
بعد ذلك ، قم بإنشاء نسخة من تلك القائمة.
myListB = myListA
إذا استخدمنا عامل التشغيل "==" أو عامل التشغيل "is" ، فسيؤدي كلاهما إلى إخراج صحيح .
`>>> myListA == myListB # both lists contains similar elements True
myListB is myListA # myListB contains the same elements True `
هذا لأن myListA و myListB يشيران إلى نفس متغير القائمة ، الذي عرّفته في بداية برنامج Python الخاص بي. كلا القائمتين متطابقتان تمامًا ، سواء في الهوية أو في المحتوى.
ومع ذلك ، ماذا لو أنشأت الآن قائمة جديدة؟
myListC = [1,2,3]
لا يزال أداء عامل ==
يشير إلى أن كلا القائمتين متماثلتين ، من حيث المحتوى.
>>> myListA == myListC True
ومع ذلك، أداء is
مشغل والآن تنتج False
الانتاج. هذا لأن myListA و myListC هما متغيرين مختلفين ، بالرغم من احتوائهما على نفس البيانات. على الرغم من أنها تبدو متشابهة ، إلا أنها مختلفة .
>>> myListA is myListC False # both lists have different reference
لنلخص:
is
ناتج التعبيرTrue
إذا كان كلا المتغيرين يشيران إلى نفس المرجع- ناتج تعبير
==
True
إذاTrue
كلا المتغيرين على نفس البيانات