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

পাইথনে রানটাইমে ফাংশন ডিফাইন করা

পাইথনে 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 কম্পাইলেশন।

  1. পাইথনে টেনসরফ্লো দিয়ে ফিচার কলাম ডিফাইন করা

  2. Python-এ Matplotlib ব্যবহার করে সাইন ফাংশন কীভাবে তৈরি করা যায়?

  3. পাইথনে Seaborn-র factorplot দিয়ে ডেটা ভিজ্যুয়ালাইজ করার পদ্ধতি

  4. পাইথনে রিকারসিভ ফাংশন তৈরি করার পদ্ধতি