تقنية

symtable في بايثون: هل is_global تعني وجود تصريح global؟

عام ضمني غير مصرح به
ضمني. [1] [2]

نقارن تصنيف الاسم بتصريح مكتوب. [1] [2]

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

لا؛ الاسم العام الضمني في دالتنا لا يحتاج تصريح global. [1] [2]

  • دون التصريح: True False. [1] [2]
  • مع التصريح: True True. [1] [2]
  • نفحص mark داخل جدول الدالة f. [1] [2]
  • التصنيف لا يثبت وجود قيمة للاسم. [1] [2]
  • اختبرنا 3.12.14 دون تشغيل المصدر. [1] [2]

المثال

import symtable as s
samples=['def f(): return mark',
         'def f():\n global mark\n'
         ' return mark']
for text in samples:
    t=s.symtable(text,'OWN','exec')
    v=t.get_children()[0].lookup('mark')
    print(v.is_global(),
          v.is_declared_global())

[1] [2]

لماذا يختلف العلمان؟

المصدر هنا يجعل is_global يقبل النطاق العام الضمني والمصرح به. أما is_declared_global فيختبر المصرح به وحده. ترتيب المخرجات هو هذان العلمان؛ لذلك بقي الأول صحيحًا في الحالتين. [1] [2]

عام مصرح به صراحة
صريح. [1] [2]

الجدول المختار وحدود النتيجة

نأخذ جدول الدالة الابن، لا رمز اسمها في جدول الوحدة. نصانا يقرآن mark ولا يسندانه محليًا. لا نستدعي الدالة أو نستخرج قيمة، وOWN تسمية مصدر في الذاكرة. الإسناد المحلي في حالة ضابطة يعطي False False. [1] [2]

المراجع

  1. Python 3.12: Symbol global flags
  2. CPython 3.12.14: symtable.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

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