الدالة 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) فقط بشكل آمن.