یه مشکل گیج کننده ای وجود داره برای کسایی که کار با پایتون رو شروع می کنن. آیا پایتون یک زبان کامپایلری هست یا تفسیری. من می خوام جواب این سوال رو اینحا براتون توضیح بدم.
زمانی که فایل پایتونمون رو می خوایم اجرا کنیم دو تا اتفاق رخ می ده:
۱- کدها به بایت کد (bytecode) تبدیل می شن.(compile)
۲- بعد از تبدیل برای اجرا به ماشین مجازی پایتون (python virtual machine) ارسال می شن.(interpreter)
۱-توضیحات قسمت اول:
نکته قبل از شروع توضیحات این که بایت کد: یک زبان سطح پایین هست (platform-independent). حواستون باشه بایت کد، کد باینری نیست.
.زمانی که کدهای پایتون رو می خواهیم اجرا کنیم به ram فرستاده می شن و توی اون محیط به بایت کدتبدیل می شن و داخل فایل هایی با پسوند pyc ذخیره می شن. قبل از ذخیره شدن در فایل pyc، پایتون برای هر ماژولی که داخل برنامه استفاده شده اول از همه نگاه می کنه که ورژن اون فایل بایت کد داخل pyc یا pyo چی هست.(ورژن یه timestamp هست که با فایل اصلی پایتون مطابقت داره) اگر جدید بود قبلی حذف و فایل جدید ایجاد می شه. به عبارت دیگه کدهای پایتون کامپایل می شن و در فایل با پسوند pyc ذخیره می شن. سرعت اجرای بایت کد هاخیلی سریع تر از کد اصلی پایتون هست.این تبدیل یه بار انجام می شه و وقتی دفعه بعدی پایتون می خواد کد رو اجرا کنه می ره سراغ pyc ها و کاری به فایل اصلی نداره یعنی مرحله کامپایل رو نادیده می گیره(به شرطی که فایل های اصلی تغییری نکرده باشن). اگر هم پایتون نتونه کد ها رو به بایت کد تبدیل کنه یعنی فایل pyc ایجاد نشه (دسترسی نداشته باشه یا هر چیز دیگه … )برنامه دوباره کار می کنه و ران میشه و همون فایل اصلی اجرا می شه. برعکس این موضوع هم وجود داره اگه کد اصلی هم نباشه فقط pyc باشه باز هم کد ها اجرا میشه.
۲-توضیحات قسمت دوم:
وقتی کد ها به بایت کد تبدیل شدن برای اجرا به ماشین مجازی فرستاده می شن. ماشین مجازی پایتون یه برنامه جداگانه یا مستقل نیست. لازم هم نیست که به صورت جداگانه نصب بشه. در حقیقت pvm یه لوپ خیلی بزرگ هست که دستورالعمل های بایت کد ها رو خط به خط، دونه دونه اجرا می کنه. این اخرین مرحله اجرای کدها هست که python interpreter گفته میشه.
امیدوارم خوب توضیح داده باشم.