آموزش جامع پایتون از صفر تا تخصص/جلسه هشتم:مفسر پایتون و حالت‌های آن
پایتون

آموزش جامع پایتون از صفر تا تخصص/جلسه هشتم:مفسر پایتون و حالت‌های آن

مفسر پایتون پایتون یک زبان مبتنی بر مفسر (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) عمل می‌کند. هر دستوری که در مقابل این اعلان وارد می‌شود، خوانده شده، ترجمه می‌گردد و سپس اجرا می‌شود. یک جلسه تعاملی معمولی به شکل زیر خواهد بود:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
>>> price = 100
>>> qty = 5
>>> total = price*qty
>>> total
500
>>> print ("Total = ", total)
Total = 500
>>> price = 100 >>> qty = 5 >>> total = price*qty >>> total 500 >>> print ("Total = ", total) Total = 500
>>> price = 100
>>> qty = 5
>>> total = price*qty
>>> total
500
>>> print ("Total = ", total)
Total = 500

برای پایان دادن به جلسه تعاملی، می‌توانید از کاراکتر پایان خط استفاده کنید (در لینوکس Ctrl+D و در ویندوز Ctrl+Z). همچنین می‌توانید در مقابل اعلان پایتون (>>>) دستور quit() را تایپ کرده و کلید Enter را فشار دهید تا به اعلان سیستم‌عامل بازگردید.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
>>> quit()
$
>>> quit() $
>>> quit()

$

🟡 پوسته تعاملی استاندارد پایتون پوسته تعاملی (Interactive Shell) که همراه با توزیع استاندارد پایتون ارائه می‌شود، امکاناتی مانند ویرایش خط، جستجوی تاریخچه دستورات، تکمیل خودکار (Auto-completion) و… را ندارد. برای بهره‌مندی از این امکانات پیشرفته، می‌توانید از مفسرهای تعاملی پیشرفته‌تری مانند IPython و bpython استفاده کنید.

🟠 مفسر پایتون – حالت اسکریپتی (Scripting Mode) بر خلاف حالت تعاملی که در آن دستورات را یکی‌یکی وارد کرده و نتیجه می‌گیرید، در حالت اسکریپتی می‌توان مجموعه‌ای از دستورات را در یک فایل متنی ذخیره کرد. کافی است مطمئن شوید که فایل دارای پسوند .py باشد و سپس نام فایل را به‌عنوان پارامتر خط فرمان در دستور python وارد کنید.

مثلاً خطوط زیر را در یک فایل با نام prog.py ذخیره کنید. برای این کار می‌توانید از ویرایشگرهای متنی مانند vim در لینوکس یا Notepad در ویندوز استفاده کنید.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
print ("My first program")
price = 100
qty = 5
total = price*qty
print ("Total = ", total)
print ("My first program") price = 100 qty = 5 total = price*qty print ("Total = ", total)
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

توجه داشته باشید که حتی اگر پایتون کل اسکریپت را یکجا اجرا کند، اما در درون، همچنان به صورت خط به خط اجرا می‌شود.

در زبان‌های مبتنی بر کامپایلر مانند جاوا، کد منبع تا زمانی که کل کد بدون خطا نباشد، به بایت کد تبدیل نمی‌شود. در پایتون، از سوی دیگر، دستورات تا زمانی که با اولین خطا مواجه شوند، اجرا می‌شوند.

حال بیایید به عمد یک خطا در کد بالا وارد کنیم.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
print ("My first program")
price = 100
qty = 5
total = prive*qty #Error in this statement
print ("Total = ", total)
print ("My first program") price = 100 qty = 5 total = prive*qty #Error in this statement print ("Total = ", total)
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 را به صورت زیر تغییر دهید: (در ادامه، نسخه اصلاح‌شده فایل آورده خواهد شد)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#! /usr/bin/python3.11
print ("My first program")
price = 100
qty = 5
total = price*qty
print ("Total = ", total)
#! /usr/bin/python3.11 print ("My first program") price = 100 qty = 5 total = price*qty print ("Total = ", total)
#! /usr/bin/python3.11

print ("My first program")
price = 100
qty = 5
total = price*qty
print ("Total = ", total)

برای علامت‌گذاری اسکریپت به عنوان فایل اجرایی مستقل، از دستور chmod استفاده کنید.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ chmod +x prog.py
$ chmod +x prog.py
$ chmod +x prog.py

حالا می‌توانید اسکریپت را مستقیماً اجرا کنید، بدون اینکه از آن به عنوان یک آرگومان خط فرمان استفاده کنید.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ ./hello.py
$ ./hello.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 استفاده کنید.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pip3 install ipython
pip3 install ipython
pip3 install ipython

اجرای IPython از خط فرمان

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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]:
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]:
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] قبل از نمایش خروجی ظاهر می‌شود.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
In [1]: price = 100
In [2]: quantity = 5
In [3]: total = price*quantity
In [4]: total
Out[4]: 500
In [5]:
In [1]: price = 100 In [2]: quantity = 5 In [3]: total = price*quantity In [4]: total Out[4]: 500 In [5]:
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? را وارد کنید.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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'.
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'.
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 اجرا کنیم.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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
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
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 به‌عنوان هسته اصلی خود استفاده می‌کند.

PHP از دستورات echo و print برای نمایش خروجی در مرورگر یا کنسول PHP استفاده می‌کند. هر دو ساختارهای زبان...
شناسه‌ها در ++C نام‌های منحصربه‌فردی هستند که برای شناسایی متغیرها، توابع، کلاس‌ها، آرایه‌ها و سایر آیتم‌های تعریف‌شده توسط کاربر در...
++C
کلمات کلیدی در C++ کلمات رزرو شده‌ای هستند که برای کامپایلر معنا و مفهوم خاصی دارند. این کلمات نمی‌توانند برای...
++C
ثابت‌ها به مقادیر ثابتی اشاره دارند که برنامه نباید آن‌ها را تغییر دهد و به آن‌ها لیترال (Literal) گفته می‌شود. ثابت‌ها می‌توانند...
C++ Programming Language
توکن‌های C++ کوچک‌ترین واحدهای مستقل در یک برنامه هستند که توسط کامپایلر شناسایی و پردازش می‌شوند. این توکن‌ها با هم...
C++ Programming Language
حذف فضای نام (Namespace) شما می‌توانید به‌صورت صریح از پیشوند std:: برای اشیاء و توابع کتابخانه استاندارد استفاده کنید، به‌جای اینکه از...
C++ Programming Language
1

پشتیبانی واتساپ هوش فعال