পাইথনে types.FunctionType ব্যবহার করে রানটাইমে ডাইনামিক্যালি ফাংশন তৈরি করা যায়। এটি অ্যাডভান্সড মেটা-প্রোগ্রামিং টেকনিক।
উদাহরণ
import types
# কম্পাইল করা কোড স্ট্রিং থেকে ফাংশন তৈরি
code = compile('print("Really Works")', 'dyn.py', 'exec')
dynf = types.FunctionType(code, {})
dynf() # আউটপুট: Really Works
ব্যাখ্যা
compile(source, filename, mode)— সোর্স কোডকে কোড অবজেক্টে কম্পাইল করে (mode='exec'মডিউল লেভেল কোডের জন্য)।types.FunctionType(code, globals, name, argdefs, closure)— নতুন ফাংশন অবজেক্ট তৈরি করে।- দ্বিতীয় আর্গামেন্ট
globalsডিকশনারি (খালি ডিক্ট দেওয়া হয়েছে)।
আধুনিক বিকল্প: exec() / eval()
# exec দিয়ে ফাংশন ডিফাইন
namespace = {}
exec('def dynamic_func():\n print("Dynamic!")', namespace)
dynamic_func = namespace['dynamic_func']
dynamic_func() # Dynamic!
সতর্কতা
- সিকিউরিটি রিস্ক: অট্রাস্টেড স্ট্রিং এক্সিকিউট করলে কোড ইনজেকশন হয়।
- ডিবাগিং কঠিন: স্ট্যাক ট্রেসে ফাইল নাম
<string>দেখায়। - পারফরম্যান্স: কম্পাইলেশন ওভারহেড।
ব্যবহার ক্ষেত্র
ডাইনামিক কোড জেনারেশন, প্লাগিন সিস্টেম, রুল ইঞ্জিন, টেমপ্লেট ইঞ্জিন, JIT কম্পাইলেশন।