تقنية

partial في بايثون: هل سمة keywords للقراءة فقط تجمد القاموس؟

own.keywords["y"]=7; own(3): 10.
تعديل المدخل.

سمة keywords للقراءة فقط؛ هذا لا يجمد محتوى القاموس. نعدل مدخلًا بدل إعادة إسناد السمة. [1] [2]

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

لا؛ تعديل مدخل يختلف عن الإسناد. [1] [2]

  • سمة keywords للقراءة فقط؛ هذا لا يجمد محتوى القاموس. نعدل مدخلًا بدل إعادة إسناد السمة. [1] [2]
  • على CPython 3.12.14، add(x,y) تجمع العددين؛ own=partial(add,y=2)، وown(3) تعطي 5. [1] [2]
  • بعد own.keywords["y"]=7، تعطي own(3) العدد 10. تغير المدخل المحفوظ. [1] [2]
  • own.keywords={"y":1} ترفع AttributeError؛ own(3) تبقى 10 بعد فشل الإسناد. [1] [2]
  • تحكم: own(3,y=4) تعطي 7؛ النداء التالي own(3) يعطي 10. التجاوز لهذا النداء يبقي المدخل المحفوظ 7. [1] [2]

السمة ومحتواها

سمة keywords للقراءة فقط؛ هذا لا يجمد محتوى القاموس. نعدل مدخلًا بدل إعادة إسناد السمة. [1] [2]

جمع المثال

على CPython 3.12.14، add(x,y) تجمع العددين؛ own=partial(add,y=2)، وown(3) تعطي 5. [1] [2]

تعديل المدخل

بعد own.keywords["y"]=7، تعطي own(3) العدد 10. تغير المدخل المحفوظ. [1] [2]

from functools import partial def add(x,y):return x+y own=partial(add,y=2) print(own(3)) own.keywords["y"]=7 print(own(3)) [1] [2]

own.keywords={"y":1}: AttributeError; own(3): 10.
رفض إعادة الإسناد.

الإسناد والتحكم

own.keywords={"y":1} ترفع AttributeError؛ own(3) تبقى 10 بعد فشل الإسناد. [1] [2]

try:own.keywords={"y":1} except AttributeError:print("AttributeError") print(own(3,y=4),own(3)) [1] [2]

تحكم: own(3,y=4) تعطي 7؛ النداء التالي own(3) يعطي 10. التجاوز لهذا النداء يبقي المدخل المحفوظ 7. [1] [2]

المراجع

  1. Python partial attributes
  2. CPython partial

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

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