كل ما تحتاج لمعرفته حول Eval في بايثون



ستزودك هذه المقالة بمعرفة مفصلة وشاملة عن Eval في Python ، وهي عيوبها واستخدامها مع أمثلة.

في كل مكان تنظر حولك ، ستجد تطبيقًا تم تصميمه خصيصًا لتلبية احتياجاتك. على الرغم من وجود العديد من لغات البرمجة التي يمكن استخدامها لتطوير هذه التطبيقات ، إلا أن معظمها مبني باستخدام . تقدم Python جنبًا إلى جنب مع ميزاتها الرائعة وتعدد الاستخدامات المتزايد عروضاً فريدة من نوعها تكون قوية ومفيدة للغاية في جميع الأوقات. سنناقش النقاط التالية في مقالة Eval in Python هذه:

ما هو Eval في بايثون؟

تعد وظيفة EV في Python واحدة من أكثر الخيارات إثارة للاهتمام. يسميها البعض الاختراق والبعض يسميها اختصارًا ، ولكن في كلتا الحالتين يمكنك الاستفادة منه لتشغيل برنامج Python ضمن كود Python. رائع حق؟





عندما تستخدم وظيفة Eval ، فأنت تحث المترجم بشكل أساسي على تشغيل ما هو محاط بقوس دالة EVAL.

PythonLogo- Eval في بايثونالصيغة المستخدمة في استخدام وظيفة Eval في Python هي:



EVAL (التعبير ، الكرة الأرضية = لا شيء ، السكان المحليون = لا شيء)

في النحو أعلاه ،

  1. التعبير: إنها السلسلة أو جزء من الكود الذي يتم تحليله وتقييمه كتعبير Python داخل برنامج Python نفسه.



  2. عالمي: هو القاموس الذي يستخدم لتعريف جميع الطرق العامة المتاحة لتنفيذ التعبير المذكور أعلاه. هذا كيان اختياري واستخداماته تعتمد على حاجتك.

  3. السكان المحليون: على غرار globals ، هذا قاموس آخر يستخدم لتحديد الطرق المحلية المتاحة وكذلك المتغيرات.

لفهم استخدام هذه الوظيفة بشكل أفضل ، ألق نظرة على المثال أدناه.

من استيراد الرياضيات * def secret_function (): إرجاع 'المفتاح السري هو 1234' def function_creator (): # التعبير المراد تقييمه expr = raw_input ('أدخل الوظيفة (من حيث x):') # المتغير المستخدم في التعبير x = int (raw_input ('أدخل قيمة x:')) # تقييم التعبير y = Eval (expr) # printing نتيجة مقيمة طباعة ('y = {}'. format (y)) if __name__ == '__main__': function_creator ()

في المثال أعلاه ، function_creator هي دالة تقوم بتقييم التعبيرات الرياضية التي أنشأها المستخدم عند تنفيذ البرنامج.

انتاج:

أدخل الوظيفة (من حيث x): x * (x + 1) * (x + 2)

أدخل قيمة x: 3

ص = 60

تحليل

الآن بعد أن شاهدت الكود الذي تمت مشاركته أعلاه ، دعنا نحلله قليلاً.

  1. ستأخذ الوظيفة أعلاه أي متغير في التعبير x كمدخل لها.

  2. بمجرد التنفيذ ، سيُطلب من المستخدم إدخال قيمة لـ x ، وبعد ذلك فقط سيتم إنشاء البرنامج.

  3. أخيرًا ، سيقوم برنامج Python بتنفيذ وظيفة Eval من خلال تحليل ملفإكسبركحجة.

عيوب التقييم

على غرار الوظائف المضمنة الأخرى في Python ، تأتي قيمة EV أيضًا مع بعض العيوب التي قد تخلق مشكلة إذا لم يتم أخذها في الاعتبار.

إذا نظرت إلى المثال أعلاه ، فإن إحدى نقاط الضعف الرئيسية للوظيفة ، function_creator هي أنه يمكنها كشف أي قيم مخفية داخل البرنامج وأيضًا استدعاء دالة ضارة حيث أن Eval افتراضيًا سيؤدي إلى تنفيذ أي شيء يقع داخل أقواسها.

لفهم ذلك بشكل أكبر ، ألق نظرة على المثال أدناه.

المدخلات من المستخدم

أدخل الوظيفة (من حيث x): secret_function ()

أدخل قيمة x: 0

انتاج:

y = المفتاح السري هو 1234

هناك موقف خطير آخر يأتي مع استخدام وظيفة EVAL وهو استيراد وحدة نظام التشغيل. عندما تقوم باستيراد وحدة نظام التشغيل ، فإنها تسمح لبيثون بقراءة وكتابة أي ملفات موجودة على نظامك الأصلي دون مصادقة من المستخدم. في مثل هذه الحالة ، إذا أخطأت في كتابة واحدةسطر من التعليمات البرمجية ، فقد يتم حذف جميع ملفاتك الأصلية.

كيف تلبيس في جافا

يكمن حل كل هذه العيوب في تقييد إمكانيات دالة EVAL.

جعل Eval Safe في بايثون

تأتي ميزة Eval بشكل افتراضي مع خيار تحليل أي وظيفة يمكنها الوصول إليها أو أي وظيفة تم تحديدها بالفعل. مع وضع ذلك في الاعتبار أثناء كتابة التعليمات البرمجية الخاصة بك ، سيحد من إمكانات التقييم إلى حد كبير وبالتالي التأكد من عدم حدوث أي خطأ.

لفهم هذا المفهوم بشكل أكبر ، ألق نظرة على المثال أدناه.

من استيراد الرياضيات * def secret_function (): إرجاع 'المفتاح السري هو 1234' def function_creator (): # التعبير المراد تقييمه expr = raw_input ('أدخل الوظيفة (من حيث x):') # المتغير المستخدم في التعبير x = int (raw_input ('أدخل قيمة x:')) # تمرير متغير x في القاموس الآمن safe_dict ['x'] = x # تقييم التعبير y = Eval (expr، {'__builtins __': None}، safe_dict) # printing طباعة النتيجة المقيمة ('y = {}'. format (y)) إذا __name__ == '__main__': # قائمة الطرق الآمنة safe_list = ['acos'، 'asin'، 'atan'، 'atan2'، 'ceil '،' cos '،' cosh '،' degrees '،' e '،' exp '،' fabs '،' floor '،' fmod '،' frexp '،' hypot '،' ldexp '،' log '، 'log10'، 'modf'، 'pi'، 'pow'، 'radians'، 'sin'، 'sinh'، 'sqrt'، 'tan'، 'tanh'] # إنشاء قاموس للطرق الآمنة safe_dict =ict ([(k، locals (). get (k، None)) لـ k في safe_list]) function_creator ()

المدخلات من المستخدم

أدخل الوظيفة (من حيث x): secret_function ()

أدخل قيمة x: 0

انتاج:

NameError: الاسم 'secret_function' غير محدد

كما ترون من خلال تقييد الوصول إلى Eval ، فقد تم إبطال فرص المخرجات الخاطئة التي يمكن أن تكون ضارة.

استخدامات Eval

كما هو موضح في الأقسام أعلاه ، نظرًا لعدة أسباب أمنية ، لا يتم استخدام التقييم بشكل شائع. ولكن مع ذلك ، هناك حالات استخدام معينة حيث ثبت أن استخدام التقييم مفيد. بعض من أهم هذه.

  1. إذا كنت تريد أن يقوم المستخدم بإدخال scriptlets الخاصة به لتعديل إخراج البرنامج ، فسيكون استخدام وظيفة Eval مفيدًا.

  2. أثناء كتابة التعبيرات لحل الاستفسارات الرياضية ، يمكنك الاستفادة من Eval. لأنه أسهل بكثير من كتابة محلل تعبير.

الآن بعد أن عرفت كل شيء عن EVAL ، نأمل أن تستفيد منه في البرمجة اليومية الخاصة بك مع مراعاة المزايا والعيوب.

بهذا نكون قد وصلنا إلى نهاية مقالة Eval in Python. للحصول على معرفة متعمقة حول Python مع تطبيقاتها المختلفة ، يمكنك ذلك للتدريب المباشر عبر الإنترنت مع دعم على مدار الساعة طوال أيام الأسبوع وإمكانية الوصول مدى الحياة.

لديك سؤال لنا؟ أذكرها في قسم التعليقات في 'Eval in Python' وسنعاود الاتصال بك.