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

पायथन eval ()

eval () विधि इस पद्धति पर पारित अभिव्यक्ति को पार्स करती है और कार्यक्रम के भीतर अभिव्यक्ति को चलाती है। दूसरे शब्दों में, यह एक स्ट्रिंग को एक पायथन प्रोग्राम के अंदर कोड के रूप में व्याख्या करता है।

सिंटैक्स

eval के लिए सिंटैक्स नीचे दिया गया है -

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

कहां

  • अभिव्यक्ति - यह विधि पर पारित अजगर अभिव्यक्ति है।

  • वैश्विक - उपलब्ध वैश्विक विधियों और चरों का एक शब्दकोश।

  • स्थानीय लोग - उपलब्ध स्थानीय विधियों और चरों का शब्दकोश।

नीचे दिए गए उदाहरण में हम उपयोगकर्ता को एक एक्सप्रेशन को सीरेट करने और उस एक्सप्रेशन का मूल्यांकन करने के लिए एक पायथन प्रोग्राम चलाने की अनुमति देते हैं। तो यह डायनामिक कोड बनाने में मदद करता है।

उदाहरण

# expression to be evaluated
user_expr = raw_input("Enter an expression in terms of variable a):")
#nter the value of variable
a = int(raw_input("Enter the value of a:"))
# evaluate the expression
result = eval(user_expr)
# printing evaluated result
print("Result = {}".format(result))

आउटपुट

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

Enter an expression in terms of variable a):a*(a-3)+a^2
Enter the value of 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']

चुनिंदा कार्यों को वैश्विक और स्थानीय दोनों में पास करना

हम स्थानीय और वैश्विक दोनों दायरे में फ़ंक्शन की उपलब्धता को प्रतिबंधित कर सकते हैं, किसी भी अंतर्निहित और स्थानीय रूप से आयातित पुस्तकालयों में से कुछ को अनुमति नहीं दे सकते हैं। नीचे दिए गए उदाहरण में हमने टाइम लाइब्रेरी से केवल 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. किसी दिए गए एक्सप्रेशन के एक्सप्रेशन ट्री के निर्माण के लिए पायथन प्रोग्राम

    एक्सप्रेशन ट्री वे होते हैं जिनमें लीफ नोड्स के संचालन के लिए मान होते हैं, और आंतरिक नोड्स में वह ऑपरेटर होता है जिस पर लीफ नोड का प्रदर्शन किया जाएगा। उदाहरण:4 + ((7 + 9) * 2) एक एक्सप्रेशन ट्री होगा जैसे - इस समस्या को हल करने का तरीका किसी दिए गए एक्सप्रेशन के लिए एक्सप्रेशन ट्री बनाने के ल

  1. पायथन में नियमित अभिव्यक्ति संशोधक कैसे काम करते हैं?

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