هل كل شيء أكبر من لا شيء؟ [مكرر
-
19-09-2019 - |
سؤال
هذا السؤال لديه بالفعل إجابة هنا:
- عدد أصغر من اللانهاية السلبية في بيثون؟ 1 الإجابة
هل هناك python المدمج في datatype، بجانب None
, ، لأي منهم:
>>> not foo > None
True
أين foo
هي قيمة هذا النوع؟ ماذا عن بيثون 3؟
المحلول
None
هو دائما أقل من أي نوع بيانات في بيثون 2 (انظر object.c
).
في بيثون 3، تم تغيير هذا؛ الآن القيام بمقارنات على الأشياء دون نتائج أمر طبيعي معقول في TypeError
. وبعد من 3.0 "ما الجديد" التحديثات:
قام Python 3.0 بتبسيط القواعد الخاصة بمقارنات الطلب:
مشغلي مقارنة الطلب (
<
,<=
,>=
,>
) رفع أTypeError
استثناء عندما لا يكون لدى المعاملات طلبا طبيعيا ذا معنى. وبالتالي، تعبيرات مثل:1 < ''
,0 > None
أوlen <= len
لم تعد صالحة، وNone < None
يثيرTypeError
بدلا من العودةFalse
. وبعد النتيجة الطبيعية هي أن فرز قائمة غير متجانسة لم تعد منطقية - يجب أن تكون جميع العناصر قابلة للمقارنة مع بعضها البعض. لاحظ أن هذا لا ينطبق على==
و!=
المشغلون: كائنات أنواع مختلفة لا تضاهى دائما مقارنة غير متكافئة بعضها البعض.
هذا يزعج بعض الناس لأنه غالبا ما يكون مفيدا للقيام بأشياء مثل فرز قائمة كانت لديها بعض None
القيم فيه، ولها None
تظهر القيم متفاوتة معا في البداية أو النهاية. كان هناك موضوع في القائمة البريدية حول هذا الموضوع مرة أخرى، لكن النقطة النهائية هي أن بيثون 3 يحاول تجنب اتخاذ قرارات تعسفية حول الطلب (وهو ما حدث كثيرا في بيثون 2).
نصائح أخرى
من بيثون 2.7.5 مصدر (object.c
):
static int
default_3way_compare(PyObject *v, PyObject *w)
{
...
/* None is smaller than anything */
if (v == Py_None)
return -1;
if (w == Py_None)
return 1;
...
}
تعديل: رقم الإصدار المضافة.