eval() मेथड इस मेथड को पास किए गए एक्सप्रेशन को पार्स करता है और प्रोग्राम के भीतर एक्सप्रेशन को चलाता है। दूसरे शब्दों में, यह एक स्ट्रिंग को Python प्रोग्राम के अंदर कोड के रूप में इंटरप्रेट करता है।
सिंटैक्स
eval के लिए सिंटैक्स नीचे दिया गया है -
eval(expression, globals=None, locals=None)
जहां
Expression - यह मेथड को पास किया गया Python एक्सप्रेशन है।
globals - उपलब्ध ग्लोबल मेथड और वेरिएबल का एक डिक्शनरी।
locals - उपलब्ध लोकल मेथड और वेरिएबल का एक डिक्शनरी।
नीचे दिए गए उदाहरण में हम उपयोगकर्ता को एक एक्सप्रेशन बनाने और उस एक्सप्रेशन का मूल्यांकन करने के लिए एक Python प्रोग्राम चलाने की अनुमति देते हैं। इसलिए यह डायनामिक कोड बनाने में मदद करता है।
उदाहरण
# मूल्यांकन करने के लिए एक्सप्रेशन user_expr = input("वेरिएबल a के संदर्भ में एक एक्सप्रेशन दर्ज करें:") # वेरिएबल a का मान दर्ज करें a = int(input("a का मान दर्ज करें:")) # एक्सप्रेशन का मूल्यांकन करें result = eval(user_expr) # मूल्यांकन परिणाम प्रिंट करें print("Result = {}".format(result))आउटपुट
उपरोक्त कोड चलाने पर हमें निम्नलिखित परिणाम मिलता है -
वेरिएबल a के संदर्भ में एक एक्सप्रेशन दर्ज करें: a*(a-3)+a^2 a का मान दर्ज करें: 7 Result = 33
eval() के साथ सुरक्षा समस्या
वेब एप्लिकेशन या डेस्कटॉप प्रोग्राम से जुड़े प्रोग्राम के लिए इस बात की संभावना है कि ऐसे eval() मेथड का उपयोग सुरक्षा कमजोरियां पैदा करेगा क्योंकि प्रोग्राम चलाने वाला उपयोगकर्ता ऐसे एक्सप्रेशन प्रदान कर सकता है जो सिस्टम कमांड हैं फाइल डिलीट करने या सिस्टम से संवेदनशील डेटा प्राप्त करने के लिए। इसे रोकने के एक कदम के रूप में हम eval() फ़ंक्शन को कुछ चुने हुए फ़ंक्शन या वेरिएबल तक सीमित कर सकते हैं।
इन कमजोरियों को रोकने के चरण नीचे दिए गए हैं -
eval() मेथड में लोकल और ग्लोबल दोनों वेरिएबल को छोड़ दें।
इस तरह यह केवल वर्तमान स्कोप में मूल्यांकन किया जाएगा और इस स्कोप के बाहर अन्य वेरिएबल नहीं ढूंढेगा।
केवल लोकल पैरामीटर छोड़ दें
लोकल वेरिएबल को छोड़ने पर, सभी वेरिएबल ग्लोबल वेरिएबल के रूप में स्कोप्ड होते हैं। अगला हम ग्लोबल वेरिएबल के रूप में एक खाली डिक्शनरी पास करते हैं और यह केवल बिल्ट-इन वेरिएबल को उपलब्ध होने देता है तब भी जब हमने प्रोग्राम में अन्य लाइब्रेरी आयात की हों।
उदाहरण
from time import * print(eval('dir()', {}))