مفسر پایتون پایتون یک زبان مبتنی بر مفسر (Interpreter-based) است. در سیستمهای لینوکس، فایل اجرایی پایتون در مسیر /usr/bin/
نصب میشود. در ویندوز، فایل اجرایی پایتون (python.exe
) در پوشه نصب (برای مثال C:\python311
) قرار دارد.
این آموزش به شما یاد میدهد که مفسر پایتون چگونه در حالت تعاملی (interactive) و اسکریپتی (scripted) کار میکند. کد پایتون به روش اجرای یک دستور در هر بار اجرا میشود. مفسر پایتون دارای دو مؤلفه است. مترجم (translator) ابتدا دستور را از نظر نحوی (syntax) بررسی میکند. اگر دستور درست باشد، یک کد میانی به نام بایتکد (byte code) تولید میکند. سپس یک ماشین مجازی پایتون (Python Virtual Machine) این بایتکد را به کد دودویی بومی (native binary) تبدیل کرده و اجرا میکند. نمودار زیر این سازوکار را نشان میدهد:
مفسر پایتون دارای دو حالت تعاملی (interactive) و اسکریپتی (scripted) است.
مفسر پایتون – حالت تعاملی (Interactive Mode)
زمانی که مفسر پایتون از طریق خط فرمان (command line terminal) بدون هیچ گزینه اضافی اجرا شود، یک اعلان پایتون به صورت >>>
ظاهر میشود و مفسر پایتون بر اساس اصل REPL (خواندن، ارزیابی، چاپ، تکرار – Read, Evaluate, Print, Loop) عمل میکند. هر دستوری که در مقابل این اعلان وارد میشود، خوانده شده، ترجمه میگردد و سپس اجرا میشود. یک جلسه تعاملی معمولی به شکل زیر خواهد بود:
>>> price = 100 >>> qty = 5 >>> total = price*qty >>> total 500 >>> print ("Total = ", total) Total = 500
برای پایان دادن به جلسه تعاملی، میتوانید از کاراکتر پایان خط استفاده کنید (در لینوکس Ctrl+D
و در ویندوز Ctrl+Z
). همچنین میتوانید در مقابل اعلان پایتون (>>>
) دستور quit()
را تایپ کرده و کلید Enter را فشار دهید تا به اعلان سیستمعامل بازگردید.
>>> quit() $
پوسته تعاملی استاندارد پایتون پوسته تعاملی (Interactive Shell) که همراه با توزیع استاندارد پایتون ارائه میشود، امکاناتی مانند ویرایش خط، جستجوی تاریخچه دستورات، تکمیل خودکار (Auto-completion) و… را ندارد. برای بهرهمندی از این امکانات پیشرفته، میتوانید از مفسرهای تعاملی پیشرفتهتری مانند IPython و bpython استفاده کنید.
مفسر پایتون – حالت اسکریپتی (Scripting Mode) بر خلاف حالت تعاملی که در آن دستورات را یکییکی وارد کرده و نتیجه میگیرید، در حالت اسکریپتی میتوان مجموعهای از دستورات را در یک فایل متنی ذخیره کرد. کافی است مطمئن شوید که فایل دارای پسوند
.py
باشد و سپس نام فایل را بهعنوان پارامتر خط فرمان در دستور python
وارد کنید.
مثلاً خطوط زیر را در یک فایل با نام prog.py
ذخیره کنید. برای این کار میتوانید از ویرایشگرهای متنی مانند vim در لینوکس یا Notepad در ویندوز استفاده کنید.
print ("My first program") price = 100 qty = 5 total = price*qty print ("Total = ", total)
زمانی که برنامه بالا را بر روی یک سیستم ویندوز اجرا میکنیم، نتیجه زیر به دست خواهد آمد:
C:\Users\Acer>python prog.py
My first program
Total = 500
توجه داشته باشید که حتی اگر پایتون کل اسکریپت را یکجا اجرا کند، اما در درون، همچنان به صورت خط به خط اجرا میشود.
در زبانهای مبتنی بر کامپایلر مانند جاوا، کد منبع تا زمانی که کل کد بدون خطا نباشد، به بایت کد تبدیل نمیشود. در پایتون، از سوی دیگر، دستورات تا زمانی که با اولین خطا مواجه شوند، اجرا میشوند.
حال بیایید به عمد یک خطا در کد بالا وارد کنیم.
print ("My first program") price = 100 qty = 5 total = prive*qty #Error in this statement print ("Total = ", total)
اشتباه تایپی در متغیر و نحوه واکنش پایتون به اشتباه در استفاده از متغیر
prive
به جای price
توجه کنید. حالا اگر اسکریپت را مثل قبل اجرا کنیم:
C:\Users\Acer>python prog.py
My first program
Traceback (most recent call last):
File "C:\Python311\prog.py", line 4, in <module>
total = prive*qty
^^^^^
NameError: name 'prive' is not defined. Did you mean: 'price'?
همانطور که مشاهده میکنید، دستورات قبل از خط دارای خطا اجرا شدهاند و سپس خطای مربوط به متغیر اشتباه نشان داده شده است. بنابراین کاملاً مشخص است که اسکریپت پایتون به صورت تفسیر شده (interpreted) اجرا میشود، نه کامپایل کامل.
مفسر پایتون – استفاده از Shebang (
#!
) در لینوکس علاوه بر اجرای اسکریپت پایتون با استفاده از دستور python prog.py
، در سیستمعامل لینوکس میتوان فایل اسکریپت را به یک فایل اجرایی مستقل (self-executable) مانند یک اسکریپت شل تبدیل کرد.
برای این کار باید یک خط Shebang در ابتدای فایل اسکریپت اضافه کنید. خط Shebang مشخص میکند که کدام برنامه برای تفسیر دستورات پایتون در این فایل استفاده میشود. این خط باید با #!
شروع شده و مسیر کامل مفسر پایتون را مشخص کند.
حالا فایل
prog.py
را به صورت زیر تغییر دهید: (در ادامه، نسخه اصلاحشده فایل آورده خواهد شد)
#! /usr/bin/python3.11 print ("My first program") price = 100 qty = 5 total = price*qty print ("Total = ", total)
برای علامتگذاری اسکریپت به عنوان فایل اجرایی مستقل، از دستور chmod
استفاده کنید.
$ chmod +x prog.py
حالا میتوانید اسکریپت را مستقیماً اجرا کنید، بدون اینکه از آن به عنوان یک آرگومان خط فرمان استفاده کنید.
$ ./hello.py
پایتون تعاملی – IPython IPython (مخفف Interactive Python) یک محیط تعاملی پیشرفته و قدرتمند برای پایتون است که امکانات زیادی نسبت به پوسته استاندارد پایتون دارد. IPython در ابتدا توسط فرناندو پرز در سال 2001 توسعه داده شد.
IPython ویژگیهای مهم زیر را دارد:
- توانایی شناسایی ویژگیهای اشیاء در زمان اجرا (Object introspection).
- هایلایت کردن نحو (Syntax highlighting) که برای شناسایی اجزای زبان مانند کلمات کلیدی، متغیرها و غیره مفید است.
- تاریخچه تعاملات بهطور داخلی ذخیره میشود و قابل بازتولید است.
- تکمیل خودکار (Tab completion) برای کلمات کلیدی، متغیرها و نام توابع یکی از مهمترین ویژگیها است.
- سیستم دستورهای جادویی (Magic command system) در IPython برای کنترل محیط پایتون و انجام وظایف سیستمعاملی مفید است.
- IPython هسته اصلی برای نوتبوکهای Jupyter و سایر ابزارهای فرانتاند پروژه Jupyter است.
برای نصب IPython از ابزار نصب PIP استفاده کنید.
pip3 install ipython
اجرای IPython از خط فرمان
C:\Users\Acer>ipython Python 3.11.2 (tags/v3.11.2:878ead1, Feb 7 2023, 16:38:35) [MSC v.1934 64 bit (AMD64)] on win32 Type 'copyright', 'credits' or 'license' for more information IPython 8.4.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
به جای اعلان معمولی >>>
در مفسر استاندارد، دو اعلان اصلی IPython به شرح زیر نمایش داده میشود:
In[1]
قبل از هر عبارت ورودی ظاهر میشود.
Out[1]
قبل از نمایش خروجی ظاهر میشود.
In [1]: price = 100 In [2]: quantity = 5 In [3]: total = price*quantity In [4]: total Out[4]: 500 In [5]:
تکمیل خودکار (Tab completion) یکی از مفیدترین بهبودهایی است که توسط IPython ارائه شده است. IPython لیستی از روشهای مناسب را هنگام فشردن کلید Tab پس از نقطه در مقابل شیء نمایش میدهد.
IPython اطلاعات (شناسایی ویژگیها) از هر شیء را با قرار دادن علامت سوال ?
در مقابل آن فراهم میکند. این اطلاعات شامل docstring، تعاریف توابع و جزئیات سازنده کلاس میباشد. به عنوان مثال، برای کاوش در شیء رشتهای var
که بالا تعریف شده است، در اعلان ورودی var?
را وارد کنید.
In [5]: var = "Hello World" In [6]: var? Type: str String form: Hello World Length: 11 Docstring: str(object='') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to 'strict'.
دستورات جادویی (Magic functions) IPython بسیار قدرتمند هستند. دستورات جادویی خطی به شما این امکان را میدهند که دستورات DOS را داخل IPython اجرا کنید. بیایید دستور dir
را از داخل کنسول IPython اجرا کنیم.
In [8]: !dir *.exe Volume in drive F has no label. Volume Serial Number is E20D-C4B9 Directory of F:\Python311 07-02-2023 16:55 103,192 python.exe 07-02-2023 16:55 101,656 pythonw.exe 2 File(s) 204,848 bytes 0 Dir(s) 105,260,306,432 bytes free
نوتبوک Jupyter یک رابط مبتنی بر وب برای محیطهای برنامهنویسی پایتون، جولیا، R و بسیاری دیگر است. برای پایتون، از IPython بهعنوان هسته اصلی خود استفاده میکند.