اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

إن exec كانت تعليمة برمجية في الإصدار الثاني من البايثون وأصبحت دالة في الإصدار الثالث منه، وهي تجمع (compiles) بشكل فوري المعادل للتعليمة برمجية أو مجموعة من التعليمات الموجودة في سلسلة نصية معينة، مثال لاستخدام exec:

exec('print(5)')           # prints 5.
# exec 'print 5'     if you use Python 2.x, nor the exec neither the print is a function there
exec('print(5)\nprint(6)')  # prints 5{newline}6.
exec('if True: print(6)')  # prints 6.
exec('5')                 # does nothing and returns nothing.

أما بالنسبة إلى eval فهي دالة مدمجة (وليست تعليمة برمجية)، وتقوم بمعادلة التعبير ومن ثم ستُرجع القيمة التي قام ذلك التعبير بإنتاجها كما يظهر في المثال التالي:

x = eval('5')              # x <- 5
x = eval('%d + 6' % x)     # x <- 11
x = eval('abs(%d)' % -100) # x <- 100
x = eval('x = 5')          # INVALID; assignment is not an expression.
x = eval('if 1: x = 4')    # INVALID; if is a statement, not an expression.


المصدر

  • 0
نشر

- تُستعمَل الدّالة exec()‎ لتنفيذ شيفرة بايثون ديناميكيًّا (وهذا هو الفرق الجوهري). بينما تُستخدم الدّالة eval()‎ لتقدير (evaluate) قيمة تعبير في بايثون. يتم تقدير التعبير المُعطى باستخدام معامل الكائنات العامّة globals والكائنات المحليّة locals.
- الشكل العام للدالة exec:

exec(object[, globals[, locals]])

حيث أن object يمثل سلسلة نصيّة تمثل شيفرة بايثون المُراد تنفيذها ديناميكيّاً. أما globals معامل اختياري يمثّل قاموس يُمثّل الكائنات العامّة التي ستُمرّر إلى قيمة المُعامل object. أخيراً locals معامل اختياري، يمثّل قاموس أو كائن ارتباط (mapping) يمثّل الكائنات التي ستمرر إلى قيمة المعامل object. إن لم تمرر قيمة لهذا المُعامل، فستكون قيمته هي قيمة القاموس globals.

- الشكل العام للدالة eval:

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

نفس المعاملات في الدالة السابقة، لكن هنا expression في السلسلة نصيّة التي تمثل تعبير بايثون المُراد تقديره.

 

- القيمة المعادة للدالة exec هي القيمة None مع تنفيذ الشّيفرة المُعطاة. إن لم تُمرر قيمة لكل من المُعامل globals والمعامل locals فستُنفَذ الشيفرة في البيئة التي استُدعيت فيها الدالة. وتطلق استثناءات إن كانت هناك أخطاء في بنية الشّيفرة.
- القيمة المعادة للدالة eval هي نتيجة تقدير التعبير المُعطى. إن لم تمرر قيمة لكل من المعامل globals والمعامل locals فسيُنفّذ التعبير في البيئة التي استُدعيَت فيها الدالة. وتُطلق استثناءات إن كانت هناك أخطاء في بنية التعبير.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...