الدالة eval()‎ في بايثون

من موسوعة حسوب

تُستخدم الدّالة eval()‎ لتقدير (evaluate) تعبير بايثون.

يُقدّر التّعبير المُعطى باستخدام مُعامل الكائنات العامّة globals والكائنات المحليّة locals.

البنية العامة

eval(expression, globals=None, locals=None)

المعاملات

expression

سلسلة نصيّة تُمثّل تعبير بايثون المُراد تقديره أو كائن شيفرة كذلك الذي تُعيده الدّالة compile()‎.

globals

مُعامل اختياريّ.

قاموس يُمثّل الكائنات العامّة التي ستُمرّر إلى التّعبير.

إن مُرّر هذا المُعامل دون الكائن ‎_‎_‎builtins‎_‎_‎، فستُنسَخ الكائنات العامّة الحاليّة وتُمرّر إلى المُعامل قبل مُعالجة التّعبير. ما يعني أنّ التّعبير يحصل طبيعيًّا على كامل حقوق الوصول إلى الوحدة القياسيّة builtins، وتُعمّم البيئات المُقيّدَة.

locals

مُعامل اختياريّ.

قاموس أو كائن اقتران (mapping) يُمثّل الكائنات المحليّة التي سيتمكّن التّعبير من الوصول إليها.

إن لم تُمرّر قيمة لهذا المُعامل، فستكون قيمته هي قيمة القاموس globals.

القيمة المعادة

نتيجة تقدير التّعبير المُعطى.

إن لم تُمرّر قيمة لكلّ من المُعامل globals والمُعامل locals فسيُنفّذ التّعبير في البيئة التي استُدعيَت فيها الدّالة.

تُطلق استثناءات إن كانت هناك أخطاء في بنية التّعبير.

إن استدعيت الدّالة على كائن شيفرة جُمّع بالنّمط ‎'‎exec‎'‎ (انظر الدّالة compile)، فستُساوي نتيجة الدّالة eval()‎ القيمةNone.

أمثلة

المثال التّالي يوضّح كيفيّة عمل هذه الدّالة:

>>> x = 1
>>> eval('x+1') # تعبير بايثون على شكل سلسلة نصيّة
2

ملاحظات

  • تنفيذ الجمل (statements) ديناميكيًّا يتمّ باستخدام الدّالة exec()‎.
  • تُعيد الدّالة globals()‎ القاموس العامّ الحاليّ وتُعيد locals()‎ القاموس المحليّ الحاليّ، يُمكن تمرير هاذين القاموسين إلى الدّالة eval()‎ أو الدّالة exec()‎.
  • انظر الدّالة ast.literal_eval()‎ التي يُمكن لها تقدير السلاسل النّصيّة مع تعبيرات تحتوي على بيانات حرفيّة (literals) فقط بشكل آمن.

انظر أيضًا

  • الوحدة builtins في بايثون.
  • الدالة compile()‎: تُجمّع شيفرة بايثون مصدريّةً إلى شيفرة أو كائن AST.
  • الدالة exec()‎: تستعمل لتنفيذ شيفرة بايثون ديناميكيًّا.

مصادر