منابع ترجمه · The Python Tutorial · فصل ۱۴
ویرایش ورودی تعاملی و جایگزینی تاریخچه (آموزش رسمی پایتون، فصل ۱۴)
منبع اصلی: The Python Tutorial, Chapter 14: Interactive Input Editing and History Substitution — Python Software Foundation
💡 این صفحه مثل یک نوتبوک Jupyter است: متغیر و تابعی که در یک سلول تعریف شود، در سلولهای بعدی همین صفحه در دسترس است. سلولها را به ترتیب اجرا کنید، یا با «⏮ تا اینجا» همهٔ سلولهای قبلیِ اجرانشده را یکجا اجرا کنید.
برخی نسخههای مفسر پایتون از ویرایش خط ورودی جاری و جایگزینی تاریخچه (history substitution) پشتیبانی میکنند، مشابه امکاناتی که در Korn shell و GNU Bash وجود دارد. این قابلیت با کتابخانهٔ GNU Readline پیادهسازی شده که سبکهای مختلف ویرایش را پشتیبانی میکند. این کتابخانه مستندات خودش را دارد که اینجا تکرار نمیکنیم.
۱۴٫۱. تکمیل با Tab و ویرایش تاریخچه
تکمیل نام متغیرها و ماژولها بهطور خودکار هنگام راهاندازی مفسر فعال میشود، بهطوری که کلید Tab تابع تکمیل را فراخوانی میکند؛ این تابع نام دستورهای پایتون، متغیرهای محلی جاری و نام ماژولهای موجود را بررسی میکند. برای عبارتهای نقطهدار مانند string.a، عبارت را تا آخرین '.' ارزیابی میکند و سپس از ویژگیهای شیء حاصل، تکمیل پیشنهاد میدهد. توجه کنید که اگر شیئی با متد __getattr__() بخشی از عبارت باشد، ممکن است این کار کدِ تعریفشده توسط برنامه را اجرا کند. پیکربندی پیشفرض همچنین تاریخچهٔ شما را در فایلی به نام .python_history در پوشهٔ کاربریتان ذخیره میکند. این تاریخچه در نشست بعدی مفسر تعاملی دوباره در دسترس خواهد بود.
۱۴٫۲. جایگزینهایی برای مفسر تعاملی
این امکان در مقایسه با نسخههای قبلی مفسر گام بزرگی به جلو است؛ با این حال، برخی آرزوها برآورده نشده باقی مانده است: خوب میشد اگر تورفتگی مناسب در خطوط ادامه پیشنهاد میشد (تجزیهگر میداند که آیا توکن INDENT در ادامه لازم است). سازوکار تکمیل میتواند از جدول نمادهای مفسر استفاده کند. دستوری برای بررسی (یا حتی پیشنهاد) پرانتزها، نقلقولهای متناظر و غیره نیز مفید میبود.
یک مفسر تعاملی پیشرفتهٔ جایگزین که مدتی طولانی است وجود دارد IPython است که تکمیل با Tab، کاوش اشیا و مدیریت پیشرفتهٔ تاریخچه دارد. همچنین میتوان آن را کاملاً سفارشی کرد و در برنامههای دیگر جاسازی نمود. محیط تعاملی پیشرفتهٔ مشابه دیگری bpython است.