পাইথনের ইন্টারেক্টিভ মোড REPL (Read - Evaluate - Print - Loop) নীতিতে কাজ করে। পাইথনের স্ট্যান্ডার্ড লাইব্রেরির code মডিউলে REPL এনভায়রনমেন্ট সেট আপ করার জন্য ক্লাস ও কনভেনিয়েন্স ফাংশন রয়েছে।
code মডিউলে নিচের দুটি ক্লাস সংজ্ঞায়িত:
- InteractiveInterpreter: এই ক্লাস পারসিং ও ইন্টারপ্রিটার স্টেট (ইউজারের নেমস্পেস) হ্যান্ডেল করে।
- InteractiveConsole: ইন্টারেক্টিভ পাইথন ইন্টারপ্রিটার আচরণের অনুকরণ করে।
মডিউলে দুটি কনভেনিয়েন্স ফাংশন রয়েছে:
- interact(): রিড-ইভ্যাল-প্রিন্ট লুপ চালানোর কনভেনিয়েন্স ফাংশন।
- compile_command(): পাইথন ইন্টারপ্রিটারের মেইন লুপ (REPL) অনুকরণ করতে চায় এমন প্রোগ্রামের জন্য উপযোগী।
InteractiveInterpreter মেথড:
- runsource(): ইন্টারপ্রিটারে সোর্স কম্পাইল ও রান করে।
- runcode(): কোড অবজেক্ট এক্সিকিউট করে।
InteractiveConsole মেথড:
InteractiveConsole ক্লাস InteractiveInterpreter-এর সাবক্লাস, তাই উপরের মেথডগুলো স্বয়ংক্রিয়ভাবে উপলব্ধ। অতিরিক্তভাবে নিচের মেথডগুলো সংজ্ঞায়িত:
- interact(): ইন্টারেক্টিভ পাইথন কনসোল অনুকরণ করে।
- push(): সোর্স টেক্সটের এক লাইন ইন্টারপ্রিটারে পুশ করে।
- resetbuffer(): ইনপুট বাফার থেকে অনহ্যান্ডেল্ড সোর্স টেক্সট সরিয়ে দেয়।
- raw_input(prompt=""): প্রম্প্ট লিখে ডিফল্টভাবে sys.stdin থেকে এক লাইন পড়ে।
উদাহরণ
import code
x = 10
y = 20
def add(x, y):
return x + y
print(add(x, y))
code.interact(local=locals())
print(x, y)
print(add(x, y))
উপরের কোডে দুটি ভেরিয়েবল ডিফাইন করা হয়েছে এবং ফাংশনে পাস করা হয়েছে। তারপর ইন্টারেক্টিভ কনসোল আহ্বান করা হয়েছে। local=locals() আর্গুমেন্ট লোকাল নেমস্পেসকে ইন্টারপ্রিটার লুপে ডিফল্ট হিসেবে ব্যবহার করার অনুমতি দেয়।
যদি আপনি ইন্টারেক্টিভ কনসোলেই ভেরিয়েবলগুলোকে নতুন মান দিয়ে Ctrl+D চাপায় এক্সিট করেন, তবে সে নতুন মানগুলো ফাংশনে পাস হবে।
আউটপুট
addition= 30 Python 3.6.6 |Anaconda custom (64-bit)| (default, Oct 9 2018, 12:34:16) [GCC 7.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> x=100 >>> y=200 >>> now exiting InteractiveConsole... 100 200 addition = 300