تقنية

mean في بايثون: هل تقبل خلط Decimal مع float؟

D=Decimal; data=[D("2"),4.0]; mean: TypeError.
mean ترفض الخليط.

في CPython 3.12.14، ترفض mean خليطنا من Decimal وfloat، بينما تنجح fmean. [1] [2]

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

لا في المثال؛ ترفع mean خطأ TypeError. [1] [2]

  • في CPython 3.12.14، ترفض mean خليطنا من Decimal وfloat، بينما تنجح fmean. [1] [2]
  • نختار data=[D("2"),4.0]، حيث D اختصار Decimal؛ الأول عشري والثاني float. [1] [2]
  • mean ترفع TypeError؛ التنفيذ لا يجد نوعًا مشتركًا لهذا الزوج من الأنواع. [1] [2]
  • fmean تحول إلى أعداد عائمة وتعيد float؛ تعطي 3.0 هنا. نجاحها لا يعني أن mean قبلت الخليط. [1] [2]
  • تحكم: mean مع [D("2"),D("4")] تعيد Decimal("3"). نختبر قوائم محددة، ولا نعمم القبول على كل خليط أو نثبت دقة كل تحويل. [1] [2]

القبول والإصدار

في CPython 3.12.14، ترفض mean خليطنا من Decimal وfloat، بينما تنجح fmean. [1] [2]

نوعان في قائمة

نختار data=[D("2"),4.0]، حيث D اختصار Decimal؛ الأول عشري والثاني float. [1] [2]

رفض mean

mean ترفع TypeError؛ التنفيذ لا يجد نوعًا مشتركًا لهذا الزوج من الأنواع. [1] [2]

from decimal import Decimal as D from statistics import mean,fmean data=[D("2"),4.0] try:print(mean(data)) except TypeError:print("TypeError") [1] [2]

D=Decimal; data=[D("2"),4.0]; fmean: 3.0 float.
fmean تنجح هنا.

fmean وتحكم عشري

fmean تحول إلى أعداد عائمة وتعيد float؛ تعطي 3.0 هنا. نجاحها لا يعني أن mean قبلت الخليط. [1] [2]

own=fmean(data) print(own,type(own).__name__) control=mean([D("2"),D("4")]) print(control,type(control).__name__) [1] [2]

تحكم: mean مع [D("2"),D("4")] تعيد Decimal("3"). نختبر قوائم محددة، ولا نعمم القبول على كل خليط أو نثبت دقة كل تحويل. [1] [2]

المراجع

  1. Python statistics
  2. CPython statistics

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

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