تقنية

signature في بايثون: هل يفك تعليق النوع النصي؟

التعليق النصي يبقى str افتراضيًا
نص التعليق. [1] [2]

النص الذي يسمي نوعًا يختلف عن كائن النوع. [1] [2]

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

signature() يبقي تعليقنا النصي افتراضيًا؛ eval_str=True يقيّمه. [1] [2]

  • كتبنا "int" تعليقًا للمعامل x. [1] [2]
  • التعليق في التوقيع الافتراضي نوعه str. [1] [2]
  • مع eval_str=True يصبح كائن int نفسه. [1] [2]
  • المخرجان str ثم True؛ جسم الدالة لم يستدع. [1] [2]
  • نفحص دالة عادية في 3.12.14، ونصًا من تأليفنا. [1] [2]

المثال

from inspect import signature
def f(x:"int"):
    return x
a=signature(f)
b=signature(f,eval_str=True)
u=a.parameters["x"].annotation
v=b.parameters["x"].annotation
print(type(u).__name__)
print(v is int)

[1] [2]

النص والتقييم

المصدر يمرر إعداد التقييم إلى get_annotations. الافتراضي يحتفظ بالنص؛ eval_str=True يستعمل eval للقيم النصية. فحص هوية v يميز كائن النوع عن مجرد اسمه. [1] [2]

تقييم التعليق يعطي هوية النوع int
كائن النوع. [1] [2]

حدود الفحص

قاموس تعليقات f يبقى {"x":"int"}. لم نستدع الدالة أو نفحص قيم وسائطها. التقييم قد يرفع استثناءً؛ استخدمنا اسم النوع المعروف، ولا نعمم على كل تعليق نصي. [1] [2]

المراجع

  1. Python 3.12: signature and get_annotations
  2. CPython 3.12.14: annotation evaluation
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

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

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