تقنية

assertCountEqual في بايثون: هل يقبل قوائم غير قابلة للتجزئة؟

قوائم داخلية؛ a:[[4],[4],[7]]; b:[[7],[4],[4]]; assertCountEqual; return:None; _count_diff_all_purpose
قوائم.

غياب التجزئة لا يمنع التأكيد هنا. [1] [2] [3]

الخلاصة السريعة

نعم، في مثال القوائم العادية. [1] [2] [3]

  • في CPython 3.12.14، نقارن [[4],[4],[7]] بـ[[7],[4],[4]] باستدعاء مباشر. [1] [2] [3]
  • assertCountEqual ينجح ويعيد None؛ عناصر مثالنا قوائم غير قابلة للتجزئة. [1] [2] [3]
  • التنفيذ يتحول عند TypeError من Counter إلى مقارنة عامة تعتمد المساواة. [2] [3]
  • Counter يعد كائنات قابلة للتجزئة؛ تحكم مستقل بنفس القيم يرفع TypeError. [4]
  • تغيير المقابل إلى [[4],[7],[7]] يرفع AssertionError؛ المدخلات الأصلية ثابتة. [1] [2] [3]

مثال محدد

في CPython 3.12.14، نقارن [[4],[4],[7]] بـ[[7],[4],[4]] باستدعاء مباشر. [1] [2] [3]

عناصر داخلية

assertCountEqual ينجح ويعيد None؛ عناصر مثالنا قوائم غير قابلة للتجزئة. [1] [2] [3]

المقارنة العامة

التنفيذ يتحول عند TypeError من Counter إلى مقارنة عامة تعتمد المساواة. [2] [3]

from unittest import TestCase a=[[4],[4],[7]];b=[[7],[4],[4]] t=TestCase() print(t.assertCountEqual(a,b)) bad=[[4],[7],[7]] try: t.assertCountEqual(a,bad) except AssertionError: print("AssertionError") [1] [2] [3]

تحكم مستقل؛ Counter; input:[[4],[4],[7]]; result:TypeError
عداد.

تحكم وحدود

Counter يعد كائنات قابلة للتجزئة؛ تحكم مستقل بنفس القيم يرفع TypeError. [4]

from collections import Counter control=[[4],[4],[7]] try: Counter(control) except TypeError: print("TypeError") [4]

تغيير المقابل إلى [[4],[7],[7]] يرفع AssertionError؛ المدخلات الأصلية ثابتة. [1] [2] [3]

المراجع

  1. Python unittest
  2. CPython case
  3. CPython util
  4. Python Counter

للتوسع: لغات البرمجة.

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.