`exec()` ফাংশন পাইথন কোড ডাইনামিক্যালি এক্সিকিউট করে। কোড স্ট্রিং বা কোড অবজেক্ট হিসেবে পাস করা যায়। স্ট্রিং পার্স হয়ে সিনট্যাক্স এরর চেক করার পর এক্সিকিউট হয়।
সিনট্যাক্স
exec(object, globals, locals)
স্ট্রিং পাস করা
x = 9
exec('print(5*x)') # আউটপুট: 45
কোড অবজেক্ট (মাল্টি-লাইন) পাস করা
prog_block = 'x = 3 \\nif(x < 5): \\n print(x*x)' exec(prog_block) # আউটপুট: 9
গ্লোবাল/লোকাল প্যারামিটার ছাড়া (ডিফল্ট স্কোপ)
সব ইম্পোর্টেড ফাংশন অ্যাক্সেসIBLE থাকে।
গ্লোবাল প্যারামিটার দিয়ে রেস্ট্রিকশন
- খালি ডিকশনারি `{}` পাস করলে শুধু `__builtins__` থাকে।
- নির্বাচিত ফাংশন পাস করলে (যেমন `{'lclt': localtime}`) শুধু সেগুলো অ্যাক্সেসIBLE।
লোকাল প্যারামিটার দিয়ে রেস্ট্রিকশন
from time import *
exec("print(dir())", {'__builtins__': None}, {'gtime': gmtime, 'print': print, 'dir': dir})
আউটপুট
['dir', 'gtime', 'print']
শুধু নির্দিষ্ট ফাংশনগুলো (`gmtime`, `print`, `dir`) এবং কোনো বিল্ট-ইন নয়। এটি সিকিউর স্যান্ডবক্সিং-এ সাহায্য করে।