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

من موسوعة حسوب
مراجعة 19:27، 30 أبريل 2018 بواسطة عبد-الهادي-الديوري (نقاش | مساهمات) (إضافة الصّفحة)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

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

انظر أيضًا

مصادر