Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Python eval()


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()', {}))

उपरोक्त कोड चलाने पर हमें निम्नलिखित परिणाम मिलता है -

['__builtins__']

अगला हम आयात की गई लाइब्रेरी से केवल कुछ मेथड को प्रोग्राम के लिए उपलब्ध होने की अनुमति भी दे सकते हैं।

from time import * print(eval('dir()', {'sleeptime': sleep, 'Localtime': localtime}))

आउटपुट

उपरोक्त कोड चलाने पर हमें निम्नलिखित परिणाम मिलता है -

['Localtime', '__builtins__', 'sleeptime']

ग्लोबल और लोकल दोनों में चुनिंदा फ़ंक्शन पास करना

हम लोकल और ग्लोबल दोनों स्कोप में फ़ंक्शन की उपलब्धता को प्रतिबंधित भी कर सकते हैं जिससे कोई भी बिल्ट-इन उपलब्ध न हो और केवल स्थानीय रूप से आयात की गई लाइब्रेरी से कुछ ही उपलब्ध हों। नीचे दिए गए उदाहरण में हमने time लाइब्रेरी से केवल gmtime मेथड उपलब्ध कराया है।

उदाहरण

from time import * a = 1445945763 print(eval('gmtime(a)', {'__builtins__': None}, {'a': a, 'gmtime': gmtime}))

आउटपुट

उपरोक्त कोड चलाने पर हमें निम्नलिखित परिणाम मिलता है -

time.struct_time(tm_year=2015, tm_mon=10, tm_mday=27, tm_hour=11, tm_min=36, tm_sec=3, tm_wday=1, tm_yday=300, tm_isdst=0)

  1. - पायथन में लोकेशन कोऑर्डिनेट्स को टुपल में बदलें

    जब लोकेशन कोऑर्डिनेट्स को टुपल फॉर्मेट में बदलने की आवश्यकता होती है, तो eval मेथड का उपयोग किया जा सकता है।eval मेथड उस एक्सप्रेशन को पार्स करता है जिसे आर्ग्युमेंट के रूप में पास किया जाता है। यह उस आर्ग्युमेंट को कोड के रूप में निष्पादित करता है। यह उस परिणाम को लौटाता है जिसका मूल्यांकन एक्सप्रे

  1. Python Program: दिए गए Expression का Expression Tree Construct करें Python Program: दिए गए Expression का Expression Tree Construct करें

    Expression trees वे होते हैं जिनमें leaf nodes में operate किए जाने वाले values होते हैं, और internal nodes में operator होता है जिस पर leaf node perform किया जाएगा। उदाहरण: 4 + ((7 + 9) * 2) का expression tree ऐसा होगा - Problem हल करने का दृष्टिकोण दिए गए expression के लिए Expression Tree constru

  1. - पायथन में रेगुलर एक्सप्रेशन मोडिफायर्स कैसे काम करते हैं?

    रेगुलर एक्सप्रेशन लिटरल्स में एक वैकल्पिक मोडिफायर शामिल हो सकता है जो मिलान के विभिन्न पहलुओं को नियंत्रित करता है। मोडिफायर्स को वैकल्पिक फ्लैग के रूप में निर्दिष्ट किया जाता है। आप एक्सक्लूसिव OR (|) का उपयोग करके कई मोडिफायर प्रदान कर सकते हैं, और इन्हें निम्न में से किसी एक द्वारा दर्शाया जा सक