الفرق بين المراجعتين لصفحة: «Python/eval»
لا ملخص تعديل |
|||
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة) | |||
سطر 11: | سطر 11: | ||
== المعاملات == | == المعاملات == | ||
=== <code>expression</code> === | === <code>expression</code> === | ||
سلسلة نصيّة تُمثّل تعبير بايثون المُراد تقديره أو كائن شيفرة كذلك الذي تُعيده الدّالة <code>compile()</code>. | سلسلة نصيّة تُمثّل تعبير بايثون المُراد تقديره أو كائن شيفرة كذلك الذي تُعيده الدّالة <code>[[Python/compile|compile()]]</code>. | ||
=== <code>globals</code> === | === <code>globals</code> === | ||
مُعامل اختياريّ. | مُعامل اختياريّ. | ||
قاموس يُمثّل الكائنات العامّة التي ستُمرّر إلى التّعبير. | [[Python/dict|قاموس]] يُمثّل الكائنات العامّة التي ستُمرّر إلى التّعبير. | ||
إن مُرّر هذا المُعامل دون الكائن <code>__builtins__</code>، فستُنسَخ الكائنات العامّة الحاليّة وتُمرّر إلى المُعامل قبل مُعالجة التّعبير. ما يعني أنّ التّعبير يحصل طبيعيًّا على كامل حقوق الوصول إلى الوحدة القياسيّة | إن مُرّر هذا المُعامل دون الكائن <code>__builtins__</code>، فستُنسَخ الكائنات العامّة الحاليّة وتُمرّر إلى المُعامل قبل مُعالجة التّعبير. ما يعني أنّ التّعبير يحصل طبيعيًّا على كامل حقوق الوصول إلى الوحدة القياسيّة [[Python/builtins|builtins]]، وتُعمّم البيئات المُقيّدَة. | ||
=== <code>locals</code> === | === <code>locals</code> === | ||
سطر 34: | سطر 34: | ||
تُطلق استثناءات إن كانت هناك أخطاء في بنية التّعبير. | تُطلق استثناءات إن كانت هناك أخطاء في بنية التّعبير. | ||
إن استدعيت الدّالة على كائن شيفرة جُمّع بالنّمط <code>'exec'</code> (انظر الدّالة compile)، فستُساوي نتيجة الدّالة <code>eval()</code> القيمة<code>None</code>. | إن استدعيت الدّالة على كائن شيفرة جُمّع بالنّمط <code>'exec'</code> (انظر الدّالة <code>[[Python/compile|compile]]</code>)، فستُساوي نتيجة الدّالة <code>eval()</code> القيمة<code>None</code>. | ||
== أمثلة == | == أمثلة == | ||
سطر 45: | سطر 45: | ||
== ملاحظات == | == ملاحظات == | ||
* تنفيذ الجمل (statements) ديناميكيًّا يتمّ باستخدام الدّالة <code>exec()</code>. | * تنفيذ الجمل (statements) ديناميكيًّا يتمّ باستخدام الدّالة <code>[[Python/exec|exec()]]</code>. | ||
* تُعيد | * تُعيد الدّالة <code>[[Python/globals|globals()]]</code> القاموس العامّ الحاليّ وتُعيد <code>[[Python/locals|locals()]]</code> القاموس المحليّ الحاليّ، يُمكن تمرير هاذين القاموسين إلى الدّالة <code>eval()</code> أو الدّالة <code>exec()</code>. | ||
* انظر الدّالة <code>ast.literal_eval()</code> التي يُمكن لها تقدير السلاسل النّصيّة مع تعبيرات تحتوي على بيانات حرفيّة (literals) فقط بشكل آمن. | * انظر الدّالة <code>[[Python/ast/literal eval|ast.literal_eval()]]</code> التي يُمكن لها تقدير السلاسل النّصيّة مع تعبيرات تحتوي على بيانات حرفيّة (literals) فقط بشكل آمن. | ||
== انظر أيضًا == | == انظر أيضًا == | ||
* [[Python/builtins|builtins]] | * الوحدة [[Python/builtins|builtins]] في بايثون. | ||
* [[Python/compile| | * الدالة <code>[[Python/compile|compile()]]</code>: تُجمّع شيفرة بايثون مصدريّةً إلى شيفرة أو كائن AST. | ||
* الدالة <code>[[Python/exec|exec()]]</code>: تستعمل لتنفيذ شيفرة بايثون ديناميكيًّا. | |||
== مصادر == | == مصادر == |
المراجعة الحالية بتاريخ 13:53، 21 مايو 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) فقط بشكل آمن.
انظر أيضًا
- الوحدة builtins في بايثون.
- الدالة
compile()
: تُجمّع شيفرة بايثون مصدريّةً إلى شيفرة أو كائن AST. - الدالة
exec()
: تستعمل لتنفيذ شيفرة بايثون ديناميكيًّا.