تقنية

getclosurevars في بايثون: هل globals تضم كل متغيرات الوحدة؟

cv.globals تضم tone بقيمة leaf.
العالمي المستعمل.

getclosurevars تربط الأسماء الخارجية بقيمها؛ globals هنا تضم tone، ولا تضم unused غير المستعملة. [1]

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

لا؛ وجود unused في الوحدة لا يكفي. [1]

  • getclosurevars تربط الأسماء الخارجية بقيمها؛ globals هنا تضم tone، ولا تضم unused غير المستعملة. [1]
  • على CPython 3.12.14، make تحفظ seed="bud"؛ inner تعيد len(seed+tone)، وtone="leaf" في الوحدة. [1]
  • في cv: nonlocals تضم seed بقيمة bud؛ globals تضم tone بقيمة leaf. [1]
  • builtins تضم len؛ unused="rain" موجودة في الوحدة وغائبة عن cv.globals. unbound فارغة في مثالنا. [1]
  • تحكم: control تقرأ unused، فتضمها globals بقيمة rain. نختبر أسماء بسيطة، دون سمات كائنات أو ضمان كشف كل اعتماد. [1]

الأسماء المشار إليها

getclosurevars تربط الأسماء الخارجية بقيمها؛ globals هنا تضم tone، ولا تضم unused غير المستعملة. [1]

دالة المثال

على CPython 3.12.14، make تحفظ seed="bud"؛ inner تعيد len(seed+tone)، وtone="leaf" في الوحدة. [1]

الفصل بين النطاقين

في cv: nonlocals تضم seed بقيمة bud؛ globals تضم tone بقيمة leaf. [1]

from inspect import getclosurevars tone="leaf";unused="rain" def make(): seed="bud" def inner():return len(seed+tone) return inner own=make();cv=getclosurevars(own) print(cv.nonlocals,cv.globals) [1]

cv.nonlocals تضم seed بقيمة bud.
متغير الإغلاق.

الغائب والتحكم

builtins تضم len؛ unused="rain" موجودة في الوحدة وغائبة عن cv.globals. unbound فارغة في مثالنا. [1]

print(sorted(cv.builtins),cv.unbound) def control():return unused print(getclosurevars(control).globals) [1]

تحكم: control تقرأ unused، فتضمها globals بقيمة rain. نختبر أسماء بسيطة، دون سمات كائنات أو ضمان كشف كل اعتماد. [1]

المراجع

  1. Python getclosurevars

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

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