কম্পিউটার টিউটোরিয়াল

পাইথনে eval() মেথড: এক্সপ্রেশন স্ট্রিংকে কোড হিসেবে এক্সিকিউট করা

পাইথনের eval() মেথড একটি এক্সপ্রেশন স্ট্রিংকে পাইথন এক্সপ্রেশন হিসেবে পার্স করে এবং তারপর প্রোগ্রামের ভিতরে সেই এক্সপ্রেশনটি রান করে।

সিনট্যাক্স

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

প‍্যারামিটার

  • expression: বাধ্যতামূলক স্ট্রিং প‍্যারামিটার, যা পার্স এবং এক্সিকিউট হবে।
  • globals: অপশনাল ডিকশনারি, এক্সিকিউটেবল এক্সপ্রেশন স্পেসিফাই করতে ব্যবহৃত হয়। না দিলে স্ট্যান্ডার্ড বিল্ট-ইন মেথডস ('__builtins__': None) উপলব্ধ থাকে।
  • locals: অপশনাল, লোকাল ভেরিয়েবল এবং মেথড স্পেসিফাই করতে ব্যবহৃত হয়।

সহজ eval() উদাহরণ

str1 = 'Hello'
print(eval('str1 == "Hello"'))
print(eval('str1 + ", Python"'))

আউটপুট

True
Hello, Python

ইউজার ইনপুট দিয়ে eval()

from math import *
for l in range(1, 3):
    func = input("Enter Math Function to Evaluate:\n")
    try:
        print(eval(func))
    except Exception as ex:
        print(ex)
        break
print('Done')

আউটপুট

Enter Math Function to Evaluate: abs(-42)
42
Enter Math Function to Evaluate: max(12, 3, 4, 2, 17)
17
Done

eval() globals এবং locals

গ্লোবাল এবং লোকাল স্কোপে কী ফাংশন ও ভেরিয়েবল আছে সেটা জানার জন্য:

from math import *

def square_root(n):
    return sqrt(n)

print('List of Global symbols:\n', globals())
print('\nList of Local symbols:\n', locals())
print('\nList of names in current local scope:\n', dir())

খালি globals দিয়ে eval()

>>> print(eval('dir()', {}))
['__builtins__']

সীমিত ফাংশন অ্যাক্সেস দিয়ে eval()

from math import *
for l in range(1, 4):
    func = input("Enter Math Function to Evaluate.\nAllowed Functions are: abs(x) and pow(x,y):\n")
    try:
        print(eval(func, {'absolute': abs, 'pow': pow}))
    except Exception as ex:
        print(ex)
        break
print('Done')

আউটপুট

Enter Math Function to Evaluate. Allowed Functions are: abs(x) and pow(x,y): abs(-74)
74
Enter Math Function to Evaluate. Allowed Functions are: abs(x) and pow(x,y): pow(2,7)
128.0
Enter Math Function to Evaluate. Allowed Functions are: abs(x) and pow(x,y): sqrt(47)
name 'sqrt' is not defined
Done

সুরক্ষা সতর্কতা: eval() অনবিশ্বস্ত ইনপুটের সাথে ব্যবহার করা নিরাপদ নয় কারণ এটি যেকোনো পাইথন কোড এক্সিকিউট করতে পারে। প্রোডাকশন কোডে এটা এড়িয়ে চলা ভালো।

  1. পাইথন টкин্টার-এ ফাংশন বাইন্ডিং

  2. পাইথনে issubset() ফাংশন

  3. পাইথনে intersection() ফাংশন

  4. পাইথনে ফাংশন ওভারলোডিং করার পদ্ধতি