پایتون (زبان برنامهنویسی): تفاوت میان نسخهها
جز ابرابزار |
جزبدون خلاصۀ ویرایش |
||
خط ۷۸۹: | خط ۷۸۹: | ||
}} |
}} |
||
</div> |
</div> |
||
== برای مطالعهٔ بیشتر == |
|||
* {{cite book |last=Downey |first=Allen B. |title=Think Python: How to Think Like a Computer Scientist |edition=Version 1.6.6 |date=May 2012 |isbn=978-0-521-72596-5 }} |
|||
* {{cite news |url=http://www.computerworld.com.au/index.php/id;66665771 |title=The A-Z of Programming Languages: Python |last=Hamilton |first=Naomi |date=5 August 2008 |work=Computerworld |accessdate=31 March 2010 |url-status=dead |archiveurl=https://web.archive.org/web/20081229095320/http://www.computerworld.com.au/index.php/id%3B66665771 |archivedate=29 December 2008}} |
|||
* {{cite book |last=Lutz |first=Mark |title=Learning Python |publisher=O'Reilly Media |year=2013 |edition=5th |isbn=978-0-596-15806-4 }} |
|||
* {{cite book |last=Pilgrim |first=Mark |title=Dive into Python |publisher=Apress |year=2004 |isbn=978-1-59059-356-1 |url-access=registration |url=https://archive.org/details/diveintopython0000pilg }} |
|||
* {{cite book |last=Pilgrim |first=Mark |title=Dive into Python 3 |publisher=Apress |year=2009 |isbn=978-1-4302-2415-0 }} |
|||
* {{cite book |last=Summerfield |first=Mark |title=Programming in Python 3 |publisher=Addison-Wesley Professional|year=2009|edition=2nd|isbn=978-0-321-68056-3 }} |
|||
== پیوند به بیرون == |
== پیوند به بیرون == |
نسخهٔ ۲۴ اوت ۲۰۲۰، ساعت ۰۸:۱۱
پارادایم برنامهنویسی | چند الگویی: تابعی، دستوری، شیگرا، پژواکی |
---|---|
طراحی شده توسط | خیدو فان روسوم |
توسعهدهنده | بنیاد نرمافزاری پایتون |
ظهوریافته در | ۲۰ فوریه ۱۹۹۱ |
انتشار پایدار | ۳٫۸٫۵
/ ۲۰ ژوئیه ۲۰۲۰[۱] |
انتشار آزمایشی | 3.9.0b5
/ ۲۰ ژوئیه ۲۰۲۰[۲] |
اردکی، پویا، تدریجی (از پایتون(3.5))[۳] | |
پروانه | Python Software Foundation License |
وبگاه | |
پیادهسازیهای بزرگ | |
سیپایتون، IronPython, جایتون، MicroPython, Numba, پایپای، Stackless Python | |
گویش | |
RPython، سایتون[۶] | |
متأثر از | |
تأثیر گذاشته بر | |
پایتون (به انگلیسی: Python) یک زبان برنامهنویسی تفسیری، سطح بالا، و همه منظوره است، که توسط خیدو فان روسوم طراحی، و اولین بار در سال ۱۹۹۱ منتشر شدهاست. فلسفه اصلی طراحی پایتون «خوانایی بالای کد» میباشد و نویسههای فاصله خالی در آن معنادار هستند و مکرر استفاده میشوند. ساختار زبانی و دیدگاه شیءگرا در پایتون به گونهای طراحی شدهاست که به برنامهنویس امکان نوشتن کد منطقی و واضح (بدون ابهام) را برای پروژههای کوچک و بزرگ میدهد.[۲۷]
کلمات کلیدی و اصلی این زبان به صورت حداقلی تهیه شدهاند و در مقابل کتابخانههایی که در اختیار کاربر است بسیار وسیع هستند.
بر خلاف برخی زبانهای برنامهنویسی رایج دیگر که بلاکهای کد در آکولاد تعریف میشوند (بهویژه زبانهایی که از گرامر زبان سی پیروی میکنند) در زبان پایتون از نویسه فاصله و جلو بردن متن برنامه برای مشخص کردن بلاکهای کد استفاده میشود. به این معنی که تعدادی یکسان از نویسه فاصله در ابتدای سطرهای هر بلاک قرار میگیرند، و این تعداد در بلاکهای کد درونیتر افزایش مییابد. بدین ترتیب بلاکهای کد به صورت خودکار ظاهری مرتب دارند.
پایتون مدلهای مختلف برنامهنویسی (از جمله شیگرا و برنامهنویسی دستوری و تابع محور) را پشتیبانی میکند و برای مشخص کردن نوع متغیرها از یک سامانهٔ پویا استفاده میکند.
این زبان از زبانهای برنامهنویسی مفسر بوده و به صورت کامل یک زبان شیءگرا است که در ویژگیها با زبانهای تفسیری پرل، روبی، اسکیم، اسمالتاک و تیسیال مشابهت دارد و از مدیریت خودکار حافظه استفاده میکند.[۲۸][۲۹][۳۰]
زبان پایتون ۲ رسماً از سال ۲۰۲۰ دیگر پشتیبانی نمیشود و پایتون ۲٫۷٫۱۸ آخرین نسخهٔ پایتون ۲٫۷ و همچنین پایتون ۲ است؛ و ازاین به بعد دیگر هیچ وصلهٔ امنیتی ای یا بهبود دیگری در این نسخه داده نخواهد شد.[۳۱][۳۲] با پایان پشتیبانی از پایتون ۲ فقط پایتون ۳ نسخههای بعدی آن پشتیبانی خواهند شد.[۳۳]
پایتون پروژهای آزاد و متنباز توسعهیافتهاست و توسط بنیاد نرمافزار پایتون مدیریت میگردد.[۳۴]
تاریخچه
پایتون اواخر دهه ۱۹۸۰ (میلادی)[۳۵] توسط خودو فان روسوم در مؤسسه ملی تحقیقات ریاضی و رایانه (CWI) در کشور هلند ایجاد شد.
هدف خَودو ایجاد جانشینی برای زبان برنامهنویسی ایبیسی بود[۳۶] که قابلیت پردازش استثناها را داشته باشد.[۳۷]پیادهسازی پایتون در دسامبر ۱۹۸۹ آغاز شد.[۳۸] خَودو طراح اصلی پایتون است و نقش مداوم او در تصمیمگیری پیرامون اهداف پایتون، باعث شد که انجمن پایتون به او لقب دیکتاتور خیرخواه جاویدان را بدهد.[۳۹] فان روسوم تا ۱۲ ژوئیه ۲۰۱۸ مسئولیت رهبری پروژهٔ پایتون را به عهده داشت. در آن زمان او اعلام کرد که از مسئولیت خود به عنوان دیکتاتور خیرخواه جاویدان کنارهگیری میکند.[۴۰] در حال حاضر او مسئولیت رهبری پروژهٔ پایتون را به یک شورای ۵ نفرهٔ چرخان که خود نیز یکی از اعضای آن است دادهاست.[۴۱][۴۲][۴۳]
پایتون ۲٫۰ در ۱۶ اکتبر ۲۰۰۰ با ویژگیهای مهم و جدید بسیاری منتشر شدکه شامل بازیافت حافظه با قابلیت شناسایی دور و پشتیبانی از یونیکد بود.[۴۴]
پایتون ۳٫۰ در ۳ دسامبر ۲۰۰۸ منتشر شد این نسخه بازنویسی عمده ای از نسخهٔ قبل بود که سازگاری عقبرو را شکسته بود.[۴۵]بسیاری از ویژگیهای عمدهٔ آن به پایتون 2.6.x[۴۶]
و 2.7.x پیشانتقال داده شدند. نسخههای منتشر شده از پایتون ۳ ابزار 2to3
را دارند که کار ترجمهٔ کد پایتون ۲ به پایتون ۳ را (حداقل تا حدودی) انجام میدهد.[۴۷]
از سال ۲۰۱۵ مقرر شد نسخههای پایتون ۲٫۷ تنها تا سال ۲۰۲۰ پشتیبانی شوند.[۴۸][۴۹]
نسخههای اولیه
در سال ۱۹۹۱ فان روسوم کدی با برچسب نسخه ۰٫۹٫۰ را منتشر کرد. البته در این مرحله از پیشرفت کلاسهایی با خاصیت ارث بری، پردازش استثنا، توابع و انواع داده list, dict, str وجود داشت. همچنین در این نسخه ابتدایی یک سیستم ماژول با اقتباس از ماژول-۳ وجود داشت، که فان روسوم این ماژول را به عنوان «یکی از واحدهای عمده برنامهنویسی پایتون» توصیف کرد. مدل استثناء پایتون نیز شباهتهایی به ماژول-۳ داشت، که به آن شرط else افزوده شده بود. در سال ۱۹۹۴ اولین مجمع مباحثه پیرامون پایتون شکل گرفت که مرحله برجستهای در پیشرفت کاربری پایتون بود.
نسخه ۱٫۰
پایتون در ژانویه ۱۹۹۴ به نسخه ۱٫۰ رسید. خصوصیات عمده جدید این نسخه شامل ابزارهای برنامهنویسی تابعی lambda , map , filter, reduce بود.
پایتون نسخه ۱٫۲ در سال ۱۹۹۵، زمانیکه خَودو در CVVI بود، ارائه شد. خَودو به فعالیتهای خود روی پایتون در مؤسسه ملی تحقیقات و ابتکارات (CNRI) در رستون ادامه داد و در همانجا چندین نسخه جدید انتشار یافت.
در نسخه ۱٫۴ به پایتون چندین ویژگی جدید اضافه شد. از ویژگیهای جالب توجه در میان این اضافات میتوان به الهام گرفتن از آرگومانهای کلیدی ماژول-۳ (که خود از آرگومانهای کلیدی لیسپ الهام گرفته بود) و همچنین پشتیبانی اعداد مختلط اشاره کرد.
در مدت فعالیت فان روسوم در CNRI، او پروژه «برنامهنویسی کامپیوتر برای هر کس» (CP4E) را ایجاد کرد تا برنامهنویسی را در دسترس افراد بیشتری که اطلاعات پایهای برای برنامهنویسی (برای مثال توانایی در زبان انگلیسی و مهارتهای اولیهٔ ریاضی) را دارند، قرار دهد. زبان برنامهنویسی پایتون به دلیل تمرکزش بر روی پاکسازی فرم دستوراتش، نقش مرکزی را ایفا کرد. این پروژه توسط دارپا سرمایهگذاری شد و از سال ۲۰۰۷ غیرفعال شد.
متن باز و آزاد بودن
در سال ۲۰۰۰ تیم توسعه دهنده پایتون به BeOpen.com منتقل شد و بدین صورت تیم کتابخانه باز پایتون شکل گرفت. به پیشنهاد CNRI ورژن ۱٫۶ساخته شد، بدین ترتیب برنامههای تولید شده برای ۱٫۶و ۲٫۰اشتراکهای قابل توجهی داشتند. فقط پایتون ۲٫۰ توسط BeOpen.com طراحی شده بود. بعد از تولید پایتون ۲٫۰ توسط BeOpen.com، خَودو و دیگر توسعه دهندگان کتابخانه پایتون به ایجاد دیجیتال روی آوردند. تولید پایتون ۱٫۶ شامل جواز جدید CNRI بود که بهطور قابل توجهی طولانیتر از جواز CWI (که برای تولیدات قبلی استفاده شده بود) بود. بنیاد نرمافزار آزاد توضیح داد که انتخاب شرط قانون با GNU GPL ناسازگار بود. , BeOpen CNRI و FSF تغییراتی را در جواز پایتون ایجاد کردند که با GPL سازگار باشد. پایتون ۱٫۶٫۱ عمدتاً مشابه پایتون ۱٫۶ است فقط با کمی اشکال، و با جواز سازگار با GPL.
نسخه ۲٫۰
پایتون ۲٫۰ فهرستی از ویژگیهایی را که از زبانهای برنامهنویسی تابعی ستل و هسکل اقتباس شده بود، معرفی کرد.[۵۰] نحو پایتون برای این ساختار (جدا از برتری هسکل برای کاراکترهای نقطهگذاری و کلمات الفبا) بسیار مشابه هسکل بود. پایتون ۲٫۰ همچنین یک سیستم بازیافت حافظه با قابلیت جمعآوری منابع معرفی کرد. پایتون ۲٫۱ به پایتون ۱٫۶٫۱ و ۲٫۰ نزدیک بود. جواز آن به جواز مؤسسه نرمافزار پایتون تغییر نام یافت. همه کدها، اسناد و مشخصات اضافه شده را از زمان تولید الفبای پایتون ۲٫۱ توسط مؤسسه نرمافزار پایتون (PFS) دارا شد. یک سازمان غیرانتفاعی در سال ۲۰۰۱ تشکیل شد که از مؤسسه نرمافزار آپاچی مدل گرفته بود. تولیدات شامل تغییراتی در خصوصیات زبان در پوشش حوزههای تو در تو بود، مشابه دیگر زبانهای حوزهای ایستا. (این خصوصیات دوباره از بین رفتند و به پایتون ۲٫۲ منتقل نشدند) یک تغییر بزرگ در پایتون ۲٫۲ یکسانسازی انواع دادهای پایتون و کلاسها به یک سلسله مراتب بود. این یکسانسازی اشیاء پایتون را کاملاً شیء گرا کرد.
میراث جاوا
انتخاب نحو و ضمایم کتابخانه استاندارد پایتون شدیداً وابسته به بعضی موارد در جاوا بود: بسته logging در ورژن ۲٫۳، تجزیهکننده SAX در ورژن ۲٫۰ و ساختمانهای نحو که در ورژن ۲٫۴ اضافه شد.
توسعه خصوصیات
یک طرح افزایش (PEP) در پایتون یکنواخت کردن اسنادی است که اطلاعات عمومی ای را که پایتون را شرح میدهند تولید میکنند؛ شامل پیشنهادها، توصیفها و توضیحها برای خصوصیات زبان. PEP در نظر داشت همانند روشهای اولیه، برای پیشنهاد خصوصیات جدید و نیز برای مستندسازی طرحهای اساسی، هر عامل بزرگ در پایتون را توضیح دهد. طرحهای برجسته توسط van Rossum تجدید نظر شده و توضیح داده شدند.
پایتون ۳
پایتون ۳٫۰ (که پایتون ۳۰۰۰ ویا Py3k نیز خوانده میشود) به منظور شکستن سازگاری عقبرو (به انگلیسی: backward compatibility) یا به عبارتی قطع سازگاری با گذشته پایتون ۲ و بهبود خطاها و رخنهها در نسخهٔ ۲ و همچنین حذف روشهای قدیمی طراحی شد.[۵۱] به عبارتی دیگر لازم نیست که پایتون ۳ بتواند کدی که با پایتون ۲ نوشته شده را تفسیر کند که البته این مشکل توسط نرمافزار 2to3 حل میشود.[۵۲]
فلسفه
پایتون ۳٫۰ با همان فلسفه ورژنهای قبل، در حال توسعه یافتن است، بنابراین هر منبعی در فلسفه پایتون، در پایتون ۳٫۰ به خوبی ظاهر خواهد شد. اگر چه، همانطور که پایتون روشهای جدید در برنامهریزی را جمعآوری کرده، پایتون ۳٫۰ تأکید زیادی بر از بین بردن ساختارها و ماژولهای تکراری دارد: «باید یک – و ترجیحاً فقط یک – روش بدیهی برای انجام آن وجود داشته باشد.» با این وجود پایتون ۳٫۰ به ساختار زبان چند نمونهای ادامه خواهد داد. کد نویسها همچنان اختیارات شیء گرایی، برنامهنویسی ساخت یافته، برنامهنویسی تابعی و دیگر نمونهها را دارند، اما در انتخابهای وسیع، جزئیات در پایتون ۳٫۰ آشکارتر از پایتون سری x.۲ هستند.
سازگاری و همزمانی
اولین کاندید پایتون ۳٫۰ در ۱۷ سپتامبر ۲۰۰۸منتشر شد. پایتون سری ۲.x و ۳.x بهطور موازی با هم وجود خواهند داشت، جایی که سری ۲.x سازگاری بیشتری دارد، به جای سری ۳.x مورد استفاده قرار خواهد گرفت. PEP ۳۰۰۰ اطلاعات بیشتری را در مورد فهرست نشریات دارا ست. پایتون ۳٫۰ سازگاری قبل را نقض خواهد کرد. الزامی ندارد که کدهایی که با پایتون ۲.x اجرا میشوند، برای پایتون ۳٫۰ بدون تغییر اجرا شوند. چون تغییرات اساسی بین این دو ورژن وجود دارد مثل اختلاف در حالت پرینت (بنابراین هر استفاده از پرینت به عنوان توضیح باعث شکست برنامه میشود) نوع پویای پایتون با طرحهای تغییر معنای روشهای خاص دیکشنری ترکیب میشود، به عنوان مثال، انتقال مکانیکی بی نقص از پایتون ۲.x به پایتون ۳٫۰ را بسیار دشوار میکند. اگرچه ابزاری به نام «۲to۳» بسیاری از این وظایف انتقال را انجام میدهد، اما باید توجه داشت که استفاده از توضیحات یا اخطارها با ابهام همراه است. البته در یک مرحله از الفبا، ۲to۳ انتقال را حقیقتاً کامل انجام میدهد. PEP ۳۰۰۰ پیشنهاد میکند که یک منبع نگه داشته شود (برای سری ۲.x)، و نسخهای بر مبنای پایتون ۳٫۰ با استفاده از ۲to۳ تولید شود. کدهای نتیجه شده نباید تصحیح شوند، مگر اینکه کدی طولانیتر از محدوده سری ۲.x باشد. پایتون ۲٫۶ شامل خصوصیات سازگاری مستقیم است، بهطوریکه یک روش اخطار (warning) به صورت خودکار به مسائل انتقال هشدار میدهد. هشدارها باید برای تشخیص خطا گزارش داده شوند، مشابه خصوصیات ورژنهای قبلی پایتون. (برای اطلاعات بیشتر به PEP ۳۶۱ رجوع کنید)
خصوصیات
فهرست برخی از تغییرات عمده پایتون ۳٫۰:
- تغییر پرینت چون یک تابع غیرقابل انتقال است نه یک توضیح. این باعث میشود که تغییر یک ماژول برای استفاده از یک تابع پرینت متفاوت، آسان باشد و بنابراین ایجاد نحو منظم تر میشود. در پایتون ۲٫۶ این امکان با تایپ کردن
from – future – import print – function
فراهم شد.
- اضافه شدن حمایت از یادآوری تابع انتخابی که میتواند برای معرفی تایپ خصوصی یا اهداف دیگر استفاده شود.
- یکسان کردن تایپ str/Unicode، به نمایندگی از یک متن، و معرفی یک تایپ byte تغییرناپذیر؛ با یک تایپ مطابق با bytearray تغییرپذیر، که هر دو آرایه از بایت را ارائه میکنند.
- از بین بردن خصوصیات سازگاری معکوس، شامل کلاسهای به فرم قبل، قسمت کردن اعداد صحیح، استثناءهای رشتهای، و گزارشهای نسبتاً نا آشکار.
فلسفه برنامهنویسی
پایتون یک زبان برنامهنویسی چند پارادایمی است به طوریکه هم شیء گرایی و برنامهنویسی ساختیافته را کاملاً پوشش میدهد و هم بسیاری از خصوصیات پایتون برنامهنویسی جنبه گرا و تابعی (مثل پشتیبانی از فرا برنامهنویسی)[۵۳] را پوشش میدهد.[۵۴] پارادایمهای برنامهنویسی دیگر نیز به وسیلهٔ افزونهها پشتیبانی شدهاند. مثل برنامهنویسی منطقی.[۵۵]
پایتون از تایپ پویا و ترکیبی از شمارش مرجع و یک حلقه کشف و بازیافت قسمتهای هدر رفته حافظه برای مدیریت حافظه، استفاده میکند.[۵۶] یک ویژگی مهم پایتون تحلیل نام پویا است، که روشها و نام متغیرها را در طول اجرای برنامه به هم ملحق میکند.
طرح پایتون به پشتیبانی محدود برای برنامهنویسی تابعی به سُنَت لیسپ، ارائه شد. به همین منظور پایتون دارای توابع filter
, map
, و reduce
و بیانهای لیست، دیکشنری، مجموعه، و جنراتور است.[۵۷] اگرچه، تشابههای عمدهای بین پایتون و زبان خانواده لیسپ وجود دارد. این کتابخانه دو ماژول دارد (itertools and functools) که ابزارهای تابعی را با اقتباس از هسکل و استاندارد امال پیادهسازی میکند.[۵۸]
فلسفهٔ اصلی پایتون در سند ذن پایتون (PEP 20) خلاصه شدهاست که شامل کلمات قصار زیر است:[۵۹]
به جای اینکه تمام عملکرد پایتون در هستهٔ آن متمرکز باشد طوری طراحی شدهاست که به خوبی از افزونهها پشتیبانی کند. این ویژگی پایتون که آن را محبوب کردهاست راهی برای اضافه کردن ای پی آی به نرمافزارهای موجود بودهاست. ایدهٔ فان روسوم از زبانی با هستهٔ کوچک و کتابخانهٔ استاندارد بزرگ با مفسر آسان توسعه پذیر، ریشه در سرخوردگی او از زبان ABC دارد.[۳۵]
پایتون تلاش میکند تا نحو و گرامری سادهتر و جمع و جور تر داشته باشد و به همین دلیل برای روششناسی کد فقط یک انتخاب در مقابل توسعه دهنده قرار میدهد. روش پایتون در مقابل روش پرل (بیش از یک روش برای انجام آن وجود دارد) قرار دارد و فلسفهٔ طراحی آن چنین است «باید یک راه – و ترجیحاً فقط یک راه – آشکار برای انجام آن وجود داشته باشد.».[۵۹] Alex Martelli که نویسندهٔ کتابهای مربوط به پایتون است. مینویسد: «در فرهنگ پایتون 'هوشمندانه' توصیف کردن چیزی ستایش بهشمار نمیرود.»[۶۰]
هدف دیگر طراحی زبان آسان کردن توسعهپذیری است. ماژولهایی که تازه ساخته شدهاند، بهسادگی در C و C++ نوشته میشوند. پایتون همچنین میتواند به عنوان زبان توسعه برای ماژولها و کاربردهای موجود که به برنامه واسط قابل برنامهریزی نیاز دارد، استفاده شود. توسعه دهندگان پایتون سعی کردند از بهینهسازی زود هنگام اجتناب کنند و وصلههای غیر حساس سیپایتون که باعث افزایش سرعت نهایی میشد را اضافه نکردند.[۶۱] هرگاه برای برنامهنویس پایتون سرعت اهمیت داشت او میتواند توابع زمانبر را به ماژولهای افزونه ای ببرد و آنها را به زبانهایی مثل سی بنویسد یا از پایپای استفاده کند که نوعی کامپایلر درجا است. از سایتون که اسکریپت پایتون را به سی ترجمه میکند نیز میتوان استفاده کرد.
به کاربران و علاقهمندان پایتون مخصوصاً آنان که باتجربه و باسواد به حساب میآیند Pythonistas گفته میشود.[۶۲][۶۳]
واژههای ابداعی
یک واژه ابداعی رایج در انجمن پایتون، واژهٔ pythonic است، که محدوده وسیع معنایی را در بر میگیرد. وقتی میگوییم کدی پایتونیک است یعنی از نحو پایتون به خوبی استفاده کردهاست در مقابل کد unpythonic کدیست که خوانایی بالایی ندارد و انگار به زبان دیگری نوشته شدهاست. این واژه گزینی با فلسفهٔ مینیمالیستی و خوانایی بالا در پایتون همخوانی دارد.
نام گذاری
نام پایتون از گروه کمدین بریتانیایی مانتی پایتون که سازندهٔ پایتون خیدو فان روسوم به آن علاقهمند بود گرفته شدهاست. اشاره به مانتی پایتان در فرهنگ پایتون و کدهای آن به وفور دیده میشود؛[۶۴]
دستور زبان
پایتون در نظر دارد که زبانی بسیار خوانا باشد؛ بنابراین طرح بندی آن مرتب و بدون حشو و زوائد است، و اغلب از کلمات کلیدی انگلیسی استفاده میکند، در حالی که زبانها دیگر از نقطهگذاری استفاده میکنند. پایتون نسبت به زبانهای ساخت یافته سنتی، مثل C و پاسکال استثناءهای نحوی و موارد خاص کمتری دارد.[۶۵]
دندانه دار نوشتن
پایتون برای جداکردن بلوک کد به جای استفاده کردن از آکولاد از تورفتگی فاصله خالی استفاده میکند. برای شروع بلوک کد یک پله تورفتگی را بیشتر میکنیم و برای اتمام آن یک پله بلوک کد را کمتر میکنیم.[۶۶] پس ساختار ظاهری برنامه نمایش دهندهٔ ساختار معنایی آن است.[۶۷] این ویژگی ای که به نام قانون off-side نیز شناخته میشود؛ و در بعضی از زبانها وجود دارد؛ ولی در بیشتر زبانهای برنامهنویسی وجود تورفتگی معنای خاصی نمیدهد.
شرطها و روند کنترل
شرطهای پایتون شامل:
- شرط
if
، که یک بلوک کد، تا رسیدن بهelse
وelif
(کوتاه شده else-if) را اجرا میکند. - شرط
for
، که روی یک شیء از نوع تکرار شدنی تکرار میشود، به هر متغیر محلی مقدار داده میشود برای استفاده توسط بلوک مربوط. - شرط
while
تا زمانی که شرط برقرار باشد بلوک کد را اجرا میکند. - شرط
try
برای استثناها از آن استفاده میشود؛ که اجازه میدهد بلوک کد همراه با آن با استفاده ازexcept
یاfinally
به کار گرفته شود. - شرط
raise
برای ایجاد استثناها از آن استفاده میشود. - شرط
class
، که یک بلوک کد را اجرا میکند و فضاهای محلی آن را به یک کلاس ملحق میکند، برای استفاده در برنامهنویسی شیء گرا. - شرط
def
، که تابع را تعریف میکند. - شرط
with
، که یک بلوک کد را به یک مدیر محتوا ضمیمه میکند. (به عنوان مثال، اندوختن یک قفل قبل از اجرای بلوک کد و آزاد کردن قفل بعد از اجرا) - شرط
break
برای خروج از نزدیکترین حلقه استفاده میشود. - شرط
continue
که برای پریدن از دور جاری و ادامه دادن از دور بعدی در نزدیکترین حلقه استفاده میشود. - شرط
pass
که به عنوان NOP از آن استفاده میشود و از آن برای درست کردن بلوک کد خالی استفاده میشود. - شرط
assert
که هنگام دیباگ کردن استفاده میشود. شرطی که باید اتفاق بیافتد را بررسی میکند. - شرط
yield
که از آن در توابع مولد (جنراتور) به جایreturn
استفاده میشود. - شرط
print
که در پایتون ۳ تبدیل به تابعprint()
شد. (#خصوصیات) - شرط
import
که برای وارد کردن ماژول استفاده میشود.
هر شرطی برای خود قواعد معنایی خاصی دارد: به عنوان مثال، شرط def
، بر خلاف دیگر شرطها بلوک خود را فوراً اجرا نمیکند.
سی پایتون استمرار را پشتیبانی نمیکند، و مطابق نظر خَودو فان روسوم هرگز نخواهد کرد. در ورژنهای قبلی مولد تکرار کند بود چون اطلاعات تنها در یک جهت از مولد عبور میکردند.
متدها
متدها توابعی هستند که روی اشیاء یک کلاس اجرا میشوند؛ نحو instance.method(argument)
و Class.method(instance,argument)
هر دو برای متدها و توابع نرمال استفاده میشوند ولی اولی خوانایی بیشتری دارد. متدهای پایتون، یک پارامتر self
آشکار برای دستیابی به دادههای instance
دارند، در مقابل پارامتر self
در برخی زبانها غیر آشکار است زبانهای برنامهنویسی شیء گرا (مانند جاوا، C++ ، یا روبی)
نوع دهی
پایتون از نوع دهی ادکی استفاده میکند. محدودیت تایپ در زمان کامپایل چک نمیشود؛ بنابراین عمل گرهای روی یک شیء ممکن است شکست بخورند، به این مفهوم که شیء داده شده از یک تایپ مناسب نیست. با اینکه اجباری در تایپ دهی ایستا نیست، پایتون شدیداً تایپ دهی شده، و عمل گرهای نامناسب را نهی میکند. (مثل مقدار دهی یک رشته با یک عدد)
تایپ | تغییرپذیری | توصیف | مثال نحو |
---|---|---|---|
ellipsis
|
تغییرناپذیر | ایندکس در آرایه NumPy | ... Ellipsis
|
NoneType ∗
|
تغییرناپذیر | یک شیء که نشان دهندهٔ وجود نداشتن مقدار است و در زبانهای دیگر با نام null شناخته میشود (اشارهگر هیچمقدار) | None
|
NotImplementedType ∗
|
تغییرناپذیر | یک مکان نگهدارنده که میتواند از طریق اپراتورهای دارای بار اضافی برگردانده شود تا انواع عمل پشتیبانی نشده را نشان دهد. | NotImplemented
|
bool
|
تغییرناپذیر | فقط میتواند دو مقدار به خود بگیرد: درست(True) یا نادرست(False) | True False
|
عدد (number) | |||
int
|
تغییرناپذیر | عدد صحیح | 42
|
long
|
تغییرناپذیر | وقتی ذخیره کردن یک عدد صحیح سر ریز داشته باشد، به یک دقت نامحدود Long بسط خواهد یافت (تنها در پایتون ۲)
|
3457876312345678632235674225567773487L
|
float
|
تغییرناپذیر | عدد اعشاری | 3.1415927
|
complex
|
تغییرناپذیر | عدد مختلط با عدد حقیقی و قسمت موهومی | 3+2.7j
|
دنباله (Sequence) | |||
bytearray
|
تغییرپذیر | دنباله ای از بایتها | bytearray(b'Some ASCII') bytearray(b"Some ASCII") bytearray([119, 105, 107, 105])
|
bytes
|
تغییرناپذیر | دنباله ای از بایتها | b'Some ASCI' b"Some ASCII" bytes([119, 105, 107, 105])
|
list
|
تغییرپذیر | لیستی از اشیاء که ترتیب خاصی دارند و آن اشیاء میتوانند تایپهای مختلفی باشند. | [4.0 ,'string', True]
|
str
|
تغییرناپذیر | رشته ای از کاراکترها | 'Wikipedia' "Wikipedia" """Spanning
multiple
lines"""
|
tuple
|
تغییرناپذیر | مثل list منتها تغییرناپذیر
|
(4.0 ,'string', True)
|
مجموعه (set) | |||
frozenset
|
تغییرناپذیر | مجموعه (مجموعه از اشیاء که بدون ترتیب تکرار هستند) در صورت هشبل بودن میتواند انواع مختلفی از اشیاء را همزمان بپذیرد. | frozenset([4.0, 'string', True])
|
set
|
تغییرپذیر | مثل frozenset منتها تغییرپذیر
|
{4.0 ,'string', True}
|
نگاشت (mapping) | |||
dict
|
تغییرپذیر | گروهی از جفتهای کلیدها و مقادیر | {'key1': 1.0, 3: False}
|
نوعهای قابل فراخوانی (Callable types) | |||
range
|
تغییرناپذیر | دنباله ای از اعداد است که معمولاً از آن برای حلقه با تعداد مشخصی از تکرار استفاده میشود[۶۸] | range(1, 10) range(10, -5, -2)
|
generator
|
تغییرناپذیر | توابع با سرعت و حجم کمتر از list
|
(f for f in range(10))
|
همه کلاسها در … | |||
type
|
تغییرناپذیر | کلاسها خودشان نمونههایی از کلاس type هستند (خودش یک نمونه از خودش است).
|
type(7) type('wiki')
|
^ مستقیما از طریق نام قابل دسترسی نیست.
پایتون همچنین به برنامهنویسها اجازه میدهد که تایپ دلخواه خود را تعریف کنند. این کار با استفاده از کلاسها امکانپذیر است، و اغلب برای شیء گرایی در برنامهنویسی استفاده میشود. نمونههای جدید از کلاسها با صدا زدن کلاس ساخته میشوند، و کلاسها خودشان نمونههایی از کلاس type
هستند (خودش یک نمونه از خودش است).
متغیرها
در پایتون میتوان با ایجاد متغیرهایی کلاسهای بالا را ذخیره کرد. برای اینکار باید نام متغیر را مساوی مقدار قرار دهید. یعنی: g = 2
که جی نام متغیر، و ۲ مقدار متغیر است. برای آنکه از طریق خط فرمان مقدار را دریافت کنید، باید از input
استفاده کنید که آن هم در یک متغیر ذخیره میشود:
input('enter str:')
پایتون ۲ بهطور خودکار از عدد استفاده میکند اما پایتون ۳ از رشته بهطور خودکار استفاده میکند. اگر میخواهید از کلاسهایی غیر از رشته استفاده کنید، باید از تبدیلگر استفاده کنید:
int(input('enter age:'))
اگر میخواهید چند متغیر را در یکخط بنویسید، باید ابتدا نام متغیرها و بعد مقادیر را بنویسید:
f , g , h = 1 , 2 , 3
اگر میخواهید به چند متغیر یک مقدار را نسبت دهید، باید ابتدا نام متغیرها و بعد مقدار را بنویسید:
a = b = c = d = 1
عملگرهای مقایسه ای
==
برای تشخیص آنکه ورودی با مقدار مقدار دادهشده برابر است:g == 2
<>
(پایتون ۲) و=!
(پایتون ۳) برای تشخیص مساوینبودن ورودی و مقدار دادهشده:g != 2
-
<
برای تشخیص بزرگتر بودن ورودی از مقدار و =<
برای تشخیص بزرگتر یا مساوی بودن ورودی از مقدار. -
>
برای تشخیص کوچکتر بودن ورودی از مقدار و =>
برای تشخیص کوچکتر یا مساوی بودن ورودی از مقدار. is
برای تشخیص هماهنگی ورودی و مقدار وis not
برای تشخیص هماهنگی نبودنin
برای تشخیص قرارداشتن مقدار در ورودی وnot in
برای تشخیص برعکس
در صورت درست بودن، بهما True
و در غیر این صورت، False
میدهد
عملگرهای ریاضی
در پایتون میتوان با عملگرهای ریاضی، عملهایی از جمله جمع، تفریق و ضرب و تقسیم را انجام داد:
+
برای جمع:2+2
-
برای تفریق:2-2
*
برای ضرب:2*2
**
برای بهتوان:2**2
/
برای تقسیم:2/2
(در پایتون ۲ برای بهدست آوردن بخش اعشار، باید یا هردو یا یکی از اعداد را با نقطه یا نقطهصفر: 7/2. 7.0/2.0 7.0/2
بگذاریم که در پایتون ۳ مشکل حل شد)//
برای خارج قسمت تقسیم:2//2
%
برای باقی مانده تقسیم:2%2
این عملگرها بر روی int
، float
str
و list
کار میکنند.
تغییر دادن مقدار متغیر با عملگر ریاضی
=+
برای اضافه کردن به متغیر مثلاً4=+i
یعنی ۴ تا به متغیر i اضافه کن.=-
برای کمکردن از متغیر مثلاً4=-i
یعنی ۴ تا از متغیر i کم کن.- و به همین ترتیب برای ضرب، بهتوان، تقسیم، خارج قسمت تقسیم و باقیمانده تقسیم ابتدا عملگر و سپس علامت مساوی را میگذاریم.
ماژولها در پایتون
برخی از کدها برای خلوتسازی پایتون، در ماژولها وارد شدهاست.
برای وارد کردن ماژول، به سه روش از import
استفاده میشود:
import <module name> [as <alias>]
یا
from <module name> import *
یا
from <module name> import <definition 1> [as <alias 1>][, <definition 2> [as <alias 2>]][, ...]
برای ساختن ماژول، ابتدا کلاسها، توابع و متغیرهایی را در یک فایل ذخیره میکنیم و نام فایل را در <module name>
قرار میدهیم. (کد فایل را لازم نیست وارد کنید)
نمونه کد پایتون
برنامه Hello World
برنامهٔ Hello World زیر، با استفاده از کتابخانه استاندارد و جریانهای خروجی یک متن را به خروجی استاندارد ارسال مینماید
print('Hello, world!')
برنامه محاسبهٔ فاکتوریل
def factorial(n):
f = 1
if n == 0:
f = 1
else:
for i in range(1,n+1):
f *= i
return f
تابع برای پیداکردن هش SHA-1
import hashlib
def hash_file(filename):
h = hashlib.sha1()
with open(filename,'rb') as file:
while True:
chunk = file.read(1024)
if chunk == b'':
break
h.update(chunk)
return h.hexdigest()
کاربرد
از سال ۲۰۰۳ پایتون طبق شاخص تیوبی یکی از ده زبان محبوب برنامهنویسی بودهاست و در فوریهٔ ۲۰۲۰ سومین زبان برنامهنویسی محبوب (بعد از c و جاوا) بودهاست.[۶۹]پایتون در سالهای ۲۰۰۷ ،۲۰۱۰ و ۲۰۱۸ به عنوان زبان برنامهنویسی سال انتخاب شدهاست.[۷۰]
سازمانهای بزرگی مثل گوگل،[۷۱] یاهو،[۷۲] سرن،[۷۳] فیسبوک،[۷۴] اینستاگرام،[۷۵] و ناسا[۷۶] از پایتون استفاده میکنند. ITA[۷۷] نیز از پایتون برای بعضی از اجزای خود استفاده میکند. همچنین شبکهٔ اجتماعی ردیت نیز بهطور کامل در پایتون نوشته شدهاست.[۷۸]
پایتون در نرمافزارهای بسیاری به عنوان زبان اسکریپت نویسی استفاده میشود نرمافزارهایی مثل آباکوس که از روش اجزاء محدود استفاده میکند، فریکد که اجسام سه بعدی پارامتری را مدلسازی میکند. بستههای انیمیشن سه بعدی مثل 3ds Max, Blender, Cinema 4D, Lightwave, Houdini, Maya, modo, MotionBuilder, Softimage، نرمافزار ایجاد جلوههای ویژه مثل Nuke, برنامهٔ دستکاری تصاویر دو بعدی مثل GIMP[۷۹] اینکاسکیپ، اسکربس و Paint Shop Pro,[۸۰] نرمافزارهای نت نویسی مثلscorewriter و capella. گنو دیباگر از پایتون برای pretty printer استفاده میکند تا ساختارهای پیچیده مثل C++ container را نشان دهد. شرکت ازری (ESRI) هماکنون در حال ترقی دادن پایتون به عنوان بهترین انتخاب برای نوشتن فایل آغازگر در آرک جیآیاس (ArcGIS) است.[۸۱] همچنین از پایتون در بازیهای ویدئویی استفاده میشود.[۸۲][۸۳] همچنین پایتون به عنوان اولین زبان از سه زبان گوگل اپ انجین پذیرفته شدهاست دو زبان دیگر زبانهای جاوا و گو هستند.[۸۴]
از پایتون استفاده وسیعی در صنعت امنیت اطلاعات میشود. مثل توسعهٔ اکسپلویت.[۸۵][۸۶]
پایتون در پروژههای هوش مصنوعی و یادگیری ماشینی استفاده میشود کتابخانههایی که در این کار استفاده میشوند کتابخانههایی مثل تنسورفلو، کرس، پایتورچ و Scikit-learn هستند.[۸۷][۸۸][۸۹] پایتون به عنوان زبان اسکریپت نویسی با معماری ماژولار و نحو ساده و ابزار پردازش متن قوی برای پردازش زبانهای طبیعی استفاده میشود.[۹۰]
مقبولیت
پایتون در بسیاری از سیستم عاملها به عنوان جزء استاندارد وجود دارد. پایتون در سیستم عاملهای توزیع لینوکس،[۹۱] AmigaOS 4، فری بیاسدی، نتبیاسدی، اوپنبیاسدی و مکاواس میتواند از طریق خط فرمان (ترمینال) استفاده شود. ردهت لینوکس و فدورا هر دو از نصبکننده پایتونی آناکوندا استفاده میکنند. لینوکس جنتو از پایتون در سیستم مدیریت بسته، یعنی پورتج استفاده میکند. Pardus از آن برای مدیریت و در طول راهاندازی سیستم استفاده میکند.
پیادهسازی
پیادهسازی مرجع
سیپایتون رویهٔ اصلی پایتون است، که در نشست C در استاندارد C۸۹ نوشته شد ولی از چند ویژگی نشست C۹۹ نیز استفاده کردهاست.[۹۲] سیپایتون برنامههای پایتون را به یک بایتکد میانی کامپایل میکند،[۹۳] تا بعد از آن ماشین مجازی آن را اجرا کند.[۹۴] سیپایتون با یک کتابخانه استاندارد بزرگ توزیع شدهاست، که به صورت مخلوطی از C و پایتون نوشته شدهاست. سیپایتون در ورژنهای مختلف روی پلتفرمهای زیادی کار میکند، مثل مایکروسافت ویندوز و بیشتر سیستمهای پیشرفته یونیکس.[۹۵] استفاده و توسعه آن روی پایگاههای محرمانه مانند Amoeba، در کنار پایگاههای متداول مانند یونیکس یا مکینتاش، بهطور عمده در این نظر کمک شدهاست.
دیگر پیادهسازیها
جایتون (به انگلیسی: Jython) برنامههای پایتون را به کد بایت جاوا کامپایل میکند، که بدین ترتیب میتواند با هر ماشین مجازی جاوا اجرا شود؛ و همچنین این امکان فراهم میشود که توابع کتابخانهای کلاس جاوا از برنامه پایتون به کار گرفته شود. آی رون پایتون از همین شیوه برای اجرای برنامههای پایتون روی چارچوب داتنت استفاده میکند.
پای پای (به انگلیسی: PyPy) یک مفسر سریع پایتون ۲٫۷ و ۳٫۶ است.[۹۶] پایپای نوعی کامپایلر درجاست که باعث بیشتر شدن سرعت نسبت به سیپایتون میشود ولی در عوض از بسیاری از کتابخانهها که به زبان سی نوشته شدهاند نمیتوان با آن استفاده کرد.[۹۷][۹۸]
پایتون بدون پشته(به انگلیسی: Stackless Python)، انشعابی از سی پایتون است که ریز برنامهها را اجرا میکند؛ و از پشته حافظه استفاده نمیکند. سی پایتون از GIL استفاده میکند تا وقتی برنامه پایتون بدون پشته، وابسته به OS است و میتواند به صورت همزمان اجرا شود، در هر لحظه فقط به یک زیر برنامه اجازه اجرا داده شود. پایتون برای استفاده در میکرو کنترلرها یا وظایف محدود دیگر پایگاههای مرجع، متناسب تر است. پیشبینی میشود که پایتون بدون پشته بتواند تقریباً روی همان پایگاهی که سی پایتون اجرا میشود، اجرا شود. پایپای نیز یک ورژن بدون پشته دارد.[۹۹]
میکرو پایتون (به انگلیسی: MicroPython) و CircuitPython پیادهسازی پایتون ۳ ای هستند که برای ریزکنترلگرها بهینه شدهاند.[۱۰۰]
چندین برنامه در بسته مفسر پایتون با برنامههای کاربردی (یا آغازگر) وجود دارد که مستقلاً اجرا میشوند مانند یونیکس، لینوکس، ویندوز، AmigaOS ۴ یا Mac OS X. بسیاری از کتابخانههای سه قسمتی (و حتی بعضی از یک قسمتیها) فقط روی ویندوز، لینوکس، BSD و Mac OS X موجود هستند.
پیادهسازیهای پشتیبانی نشده
نوکیا در سال ۲۰۰۵ یک مفسر پایتون برای موبایلهای سری ۶۰ با نام PyS۶۰ تولید کرد که شامل بسیاری از ماژولهای سی پایتون بود، و همچنین برخی ماژولهای اضافه شده برای یکپارچه شدن با سیستمعامل. این پروژه به منظور اجرا روی همه پایگاههای مختلف S۶۰، به روز نگاه داشته میشود.[۱۰۱]
Psyco یک کامپایل درجا است که کد بایت را به کد ماشین، در زمان اجرا تبدیل میکند. کد تولید شده، اختصاصی برای تایپهای داده خاصی است و از کدهای استاندارد پایتون سریع تر است.
همچنین مفسری به نام پایتون سی ای برای ابزار ویندوز CE (شامل بسته PC) وجود دارد؛ که در آن ابزارهایی برای اجرای آسان و توسعه GUI اضافه شدهاست. اطلاعات بیشتر را میتوانید روی وبگاه PythonCE بیابید.[نیازمند منبع]
پایتون چینی زبان برنامهنویسی پایتونی است که از لغتنامه زبان چینی استفاده میکند. در کنار کلمات رزرو شده و نام متغیرها، بیشتر عمل گرهای تایپ داده، در چینی میتوانند به خوبی کد دهی شوند.[نیازمند منبع]
کامپایلرهای تقابلی به زبانهای دیگر
چندین کامپایلر به زبانهای سطح بالای شیء گرا وجود دارد خواه زبان مبدأ پایتون محدود نشده باشد خواه زیر مجموعههای محدود شدهٔ آن یا زبانهای مشابه پایتون باشند:
- سایتون پایتون را به C و C++ کامپایل میکند.
- Google's Grumpy (آخرین انتشار در سال ۲۰۱۷) پایتون ۲ را به زبان گو کامپایل میکند.[۱۰۲][۱۰۳]
- IronPython از روش مشابهی استفاده میکند تا برنامهٔ نوشته شده با پایتون را بر .NET. زمان اجرای زبان مشترک اجرا کند.
- جایتون امکان استفاده از کلاسها کتابخانهٔ جاوا را از زبان پایتون فراهم میکند.
- MyHDL پایتون را به زبان ویاچدیال کامپایل میکند.
- Nuitka پایتون را به C++ کامپایل میکند.[۱۰۴]
- Numba از LLVM استفاده میکند تا کد پایتون را به کد ماشین کامپایل کند.
- Pyjs (آخرین انتشار در سال ۲۰۱۲) پایتون را به جاوا اسکریپت کامپایل میکند.
- Pyrex (آخرین انتشار در سال ۲۰۱۰) و Shed Skin (آخرین انتشار در سال ۲۰۱۳) به ترتیب کد پایتون را به زبانهای C و C++ کامپایل میکنند.
- Pythran کد پایتون را به زبان C++ کامپایل میکند.[۱۰۵][۱۰۶]
- RPython میتواند به زبان C, کامپایل شود و برای ساختن مفسر پایپای پایتون استفاده میشود.
کتابخانه استاندارد
پایتون یک کتابخانه استاندارد بزرگ دارد، که از آن به عنوان یکی از بزرگترین توانایی پایتون یاد میشود،[۱۰۷] مشروط به اینکه ابزارهای از پیش نوشته شده، با بسیاری از وظایف سازگار باشد. ماژولهای کتابخانه استاندارد میتوانند به شیوه ماژولهای نوشته شده در سی یا پایتون آرگومان دهی شوند. اخیراً کتابخانههای C++ به یک کتابخانه به نام Boost.Python رشد یافتهاست، برای ایجاد قابلیت همکاری بین C++ و پایتون. به دلیل تنوع گسترده در ابزارهای تولید شده توسط کتابخانه استاندارد، این کتابخانه با توانایی استفاده یک زبان سطح پایین ترکیب شده، مثل C و C++، که البته به عنوان واسط بین کتابخانههای دیگر است، پایتون میتواند یک واسط قوی بین زبانها و ابزارها باشد.
کتابخانهٔ استاندارد با تعداد زیاد فرمتها و پروتکلهایی که حمایت میکند (مانند MIME و HTTP)، خصوصاً برای نوشتن علائم اینترنت مناسب است. پایتون همچنین ماژولهایی برای ایجاد واسط کاربر گرافیکی، اتصال به پایگاه داده رابطهای، تولید اعداد شبه تصادفی، محاسبات با دقت دلخواه اعشاری،[۱۰۸] دستکاری عبارات با قاعده و آزمایش واحد دارد.
بعضی از قسمتهای کتابخانهٔ استاندارد همراه با توضیحاتی هستند (مثل WSGI wsgiref
که پیرو PEP 333 است[۱۰۹])، اما اکثریت ماژولها اینگونه نیستند. آنها از طریق کدها، اسناد داخلی، و دنباله تست شان (اگر موجود باشد) تعیین میشوند. اگر چه، به دلیل اینکه کد پایتون اکثر کتابخانههای استاندارد، چندسکویی است، فقط ماژولهای اندکی هستند که باید برای پیادهسازیهای دیگر تغییر داده شوند یا مجدّداً نوشته شوند.
در نوامبر 2019 (PyPI) مخزن رسمی برای نرمافزارهای شخص سوم پایتون بالغ بر ۲۰۰۰۰۰ پکیج دارد.[۱۱۰]
پکیجهای پایتون در زمینههای گوناگونی کاربرد دارند:
- خودکارسازی
- آنالیز داده
- پایگاه داده
- Documentation
- رابط کاربر گرافیکی
- پردازش تصویر
- یادگیری ماشین
- اپ موبایل
- چندرسانهای
- شبکه
- محاسبهٔ علمی
- مدیریت سیستم
- Test frameworks
- پردازش متن
- چارچوبهای نرمافزاری تحت وب
- Web scraping[۱۱۱]
IDE محیطهای ویرایشگر کد پایتون
بیشتر پیادهسازیهای پایتون (شامل سی پایتون، اولین پیادهسازی) میتوانند مثل یک مفسر خط فرمان عمل کنند، برای زمانی که کاربر رشته شرط را وارد میکند و فوراً نتیجه را میپذیرد. خلاصه پایتون به عنوان یک برنامه واسط عمل میکند. وقتی صرف دیگر شیوههای اجرا (کامپایل کد بایت یا کامپایل کد محلی) به صورت یک رشته صرف ذخیره میشود، یک افزایش سرعت در هزینههای متقابل به وجود میآید، بنابراین آنها معمولاً فقط خارج از مفسر خط فرمان استفاده میشوند. (وقتی یک ماژول وارد میشود)
برنامههای واسط دیگر، امکانات تحت آن را در مفسر بیسیک افزایش میدهند، شامل IDLE و IPython. وقتی عموماً از برنامه واسط پایتون پیروی میشود، خصوصیاتی مشابه تکمیل خودکار، نگه داشتن زمان اجرای برنامه، و نشان دادن صرف پیادهسازی میشود.
واسط گرافیکی
برای پایتون واسط گرافیکی کاربرهای بسیاری نوشته شدهاست که پرکاربردترین آنها به شرح زیر است:[۱۱۲][۱۱۳]
- تیکینتر (به صورت پیشفرض همراه با نسخههای استاندارد پایتون ارائه میشود و یک رابط شیءگرا برای ابزار Tcl/Tk در محیط پایتون فراهم میکند)
- پایکیوت
- PyGTK
- wxPython
- pyFLTK
- FXpy
- PyOpenGL
برنامههایی که کاملاً یا بخشی از آنها با پایتون نوشته شدهاست
- اینستاگرام (Instagram): نرمافزار اشتراکگذاری تصاویر و ویدیوها
- بیتتورنت (نرمافزار) (BitTorrent): نرمافزار کلاینت برای فایلهای به اشتراک گذاشته شدهٔ (p2p) توسط پروتکل بیتتورنت
- چندلر (Chandler): مدیر اطلاعات شخصی شامل تقویم، میل، کارهای روزانه، یادداشتها و…
- Civilization IV: یک گیم کامپیوتری بر مبنای پایتون که از boost.python استفاده میکند
- میلمن (Mailman): یکی از معروفترین نرمافزارهای مرتبط با ایمیل
- کمبیلو (Kombilo): مدیر پایگاه داده و مرورگر بازیهای go
- موینموین (MoinMoin): یکی از قدرتمندترین و معروفترین ویکیهای موجود
- پلون (Plone): یک ابزار مدیریتی محتوایی متن باز، قدرتمند و کاربر پسند
- پورتاژ (Portage): قلب توزیع جنتو. یک مدیر بستهای سیستم لینوکس
- زوپ (zope): یک پلتفورم شیء گرای مبتنی بر وب. زوپ شامل یک سرور نرمافزار به همراه پایگاه داده شیء گرا و یک رابط مدیریتی درونی مبتنی بر وب میباشد
- اسپیای (SPE): یک IDE رایگان، متن باز برای سیستمعاملهای ویندوز، لینوکس، مک که از wxGlade(طراحی رابط کاربر),PyChecker (دکتر کد) (Blender(3D پشتیبانی میکند
- یام (Yum): یک برنامه مدیریت بسته متنباز برای توزیعهای سازگار با آرپیام.
- آباکوس(Abaqus):نرمافزار شبیهسازی با روش المان محدود که امکان اسکریپتنویسی به زبان پایتون را به کاربر میدهد.
جستارهای وابسته
- مقایسه محیطهای یکپارچه توسعه نرمافزار
- فهرست زبانهای برنامهنویسی
- دادهکاوی با پایتون
- پایکیوت
- پیپ (مدیریت بسته)
- قواعد زبان پایتون
منابع
- ↑ "Python 3.8.5". 20 July 2020. Retrieved 21 July 2020.
- ↑ "Python 3.9.0b5". Python.org. Retrieved 20 July 2020.
- ↑ "PEP 483 -- The Theory of Type Hints". Python.org.
- ↑ File extension .pyo was removed in Python 3.5. See PEP 0488
- ↑ Holth, Moore (30 March 2014). "PEP 0441 -- Improving Python ZIP Application Support". Retrieved 12 November 2015.
- ↑ "Starlark Language". Retrieved 25 May 2019.
- ↑ "Why was Python created in the first place?". General Python FAQ. Python Software Foundation. Retrieved 22 March 2007.
- ↑ "Ada 83 Reference Manual (raise statement)".
- ↑ Kuchling, Andrew M. (22 دسامبر 2006). "Interview with Guido van Rossum (July 1998)". amk.ca. Archived from the original on 1 May 2007. Retrieved 12 March 2012.
- ↑ ۱۰٫۰ ۱۰٫۱ "itertools — Functions creating iterators for efficient looping — Python 3.7.1 documentation". docs.python.org.
- ↑ van Rossum, Guido (1993). "An Introduction to Python for UNIX/C Programmers". Proceedings of the NLUUG Najaarsconferentie (Dutch UNIX Users Group). CiteSeerX 10.1.1.38.2023.
even though the design of C is far from ideal, its influence on Python is considerable.
- ↑ ۱۲٫۰ ۱۲٫۱ "Classes". The Python Tutorial. Python Software Foundation. Retrieved 20 February 2012.
It is a mixture of the class mechanisms found in C++ and Modula-3
- ↑ Lundh, Fredrik. "Call By Object". effbot.org. Retrieved 21 November 2017.
replace "CLU" with "Python", "record" with "instance", and "procedure" with "function or method", and you get a pretty accurate description of Python's object model.
- ↑ Simionato, Michele. "The Python 2.3 Method Resolution Order". Python Software Foundation.
The C3 method itself has nothing to do with Python, since it was invented by people working on Dylan and it is described in a paper intended for lispers
- ↑ Kuchling, A. M. "Functional Programming HOWTO". Python v2.7.2 documentation. Python Software Foundation. Retrieved 9 February 2012.
- ↑ Schemenauer, Neil; Peters, Tim; Hetland, Magnus Lie (18 May 2001). "PEP 255 – Simple Generators". Python Enhancement Proposals. Python Software Foundation. Retrieved 9 February 2012.
- ↑ Smith, Kevin D.; Jewett, Jim J.; Montanaro, Skip; Baxter, Anthony (2 September 2004). "PEP 318 – Decorators for Functions and Methods". Python Enhancement Proposals. Python Software Foundation. Retrieved 24 February 2012.
- ↑ "More Control Flow Tools". Python 3 documentation. Python Software Foundation. Retrieved 24 July 2015.
- ↑ "CoffeeScript". coffeescript.org.
- ↑ "The Genie Programming Language Tutorial". Retrieved 28 February 2020.
- ↑ "Perl and Python influences in JavaScript". www.2ality.com. 24 February 2013. Retrieved 15 May 2015.
- ↑ Rauschmayer, Axel. "Chapter 3: The Nature of JavaScript; Influences". O'Reilly, Speaking JavaScript. Retrieved 15 May 2015.
- ↑ "Why We Created Julia". Julia website. February 2012. Retrieved 5 June 2014.
We want something as usable for general programming as Python [...]
- ↑ Ring Team (4 December 2017). "Ring and other languages". ring-lang.net. ring-lang.
- ↑ Bini, Ola (2007). Practical JRuby on Rails Web 2.0 Projects: bringing Ruby on Rails to the Java platform. Berkeley: APress. p. 3. ISBN 978-1-59059-881-8.
- ↑ Lattner, Chris (3 June 2014). "Chris Lattner's Homepage". Chris Lattner. Retrieved 3 June 2014.
The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
- ↑ Kuhlman, Dave. "A Python Book: Beginning Python, Advanced Python, and Python Exercises". Section 1.1. Archived from the original (PDF) on 23 June 2012.
- ↑ Python Garbage Collection
- ↑ مستندات پایتون ۲ - زبالهروب
- ↑ مستندات پایتون ۲ - زبالهروب
- ↑ "Sunsetting Python 2". Python.org (به انگلیسی). Retrieved 2019-09-22.
- ↑ "PEP 373 -- Python 2.7 Release Schedule". Python.org (به انگلیسی). Retrieved 2019-09-22.
- ↑ "Python Developer's Guide — Python Developer's Guide". devguide.python.org. Retrieved 2019-12-17.
- ↑ «Python Programming Language – Official Website». Python Software Foundation. دریافتشده در ۵ فروردین ۱۳۹۰.
- ↑ ۳۵٫۰ ۳۵٫۱ Venners, Bill (13 January 2003). "The Making of Python". Artima Developer. Artima. Retrieved 22 March 2007.
- ↑ «History and License». The Python Software Foundation. مارس ۲۴, ۲۰۱۱. دریافتشده در ۵ فروردین ۱۳۹۰.
- ↑ مستندات پایتون - پایتون برای چه ایجاد شد؟
- ↑ van Rossum, Guido (20 January 2009). "A Brief Timeline of Python". The History of Python. Retrieved 20 January 2009.
- ↑ مشارکتکنندگان ویکیپدیا. «Benevolent Dictator For Life». در دانشنامهٔ ویکیپدیای انگلیسی، بازبینیشده در ۵ فروردین ۱۳۹۰.
- ↑ Fairchild, Carlie (12 July 2018). "Guido van Rossum Stepping Down from Role as Python's Benevolent Dictator For Life". Linux Journal. Retrieved 13 July 2018.
- ↑ "Guido van Rossum Stepping Down from Role as Python's Benevolent Dictator For Life | Linux Journal". www.linuxjournal.com (به انگلیسی).
- ↑ "Python boss Guido van Rossum steps down after 30 years". The Inquirer (به انگلیسی).
- ↑ "PEP 8100". python. Python Software Foundation. Retrieved 4 May 2019.
- ↑ Kuchling, A. M.; Zadka, Moshe (16 October 2000). "What's New in Python 2.0". Python Software Foundation. Retrieved 11 February 2012.
- ↑ "Python 3.0 Release". Python Software Foundation. Retrieved 8 July 2009.
- ↑ van Rossum, Guido (5 April 2006). "PEP 3000 – Python 3000". Python Enhancement Proposals. Python Software Foundation. Archived from the original on 3 March 2016. Retrieved 27 June 2009.
- ↑ "Automated Python 2 to 3 code translation — Python Documentation". Retrieved 11 February 2018.
- ↑ "PEP 373 -- Python 2.7 Release Schedule". python.org. Retrieved 9 January 2017.
- ↑ "PEP 466 -- Network Security Enhancements for Python 2.7.x". python.org. Retrieved 9 January 2017.
- ↑ Functional Programming HOWTO
- ↑ «What's New In Python 3.0». Python Software Foundation. فوریه ۱۴, ۲۰۰۹. دریافتشده در ۵ فروردین ۱۳۹۰.
- ↑ «Automated Python 2 to 3 code translation». Python Software Foundation. فوریه ۱۴, ۲۰۰۹. دریافتشده در ۵ فروردین ۱۳۹۰.
- ↑ The Cain Gang Ltd. "Python Metaclasses: Who? Why? When?" (PDF). Archived from the original (PDF) on 30 May 2009. Retrieved 27 June 2009.
- ↑ "3.3. Special method names". The Python Language Reference. Python Software Foundation. Retrieved 27 June 2009.
- ↑ "PyDatalog". Retrieved 22 July 2012.
- ↑ "Extending and Embedding the Python Interpreter: Reference Counts" (به انگلیسی). Docs.python.org. Retrieved June 5, 2020.
Since Python makes heavy use of
malloc()
andfree()
, it needs a strategy to avoid memory leaks as well as the use of freed memory. The chosen method is called reference counting. - ↑ Hettinger, Raymond (30 January 2002). "PEP 289 – Generator Expressions". Python Enhancement Proposals. Python Software Foundation. Retrieved 19 February 2012.
- ↑ "6.5 itertools – Functions creating iterators for efficient looping". Docs.python.org. Retrieved 22 November 2016.
- ↑ ۵۹٫۰ ۵۹٫۱ Peters, Tim (19 August 2004). "PEP 20 – The Zen of Python". Python Enhancement Proposals. Python Software Foundation. Retrieved 24 November 2008.
- ↑ Martelli, Alex; Ravenscroft, Anna; Ascher, David (2005). Python Cookbook, 2nd Edition. O'Reilly Media. p. 230. ISBN 978-0-596-00797-3.
- ↑ "Ebeab.com". ebeab.com.
- ↑ Goodger, David. "Code Like a Pythonista: Idiomatic Python". Archived from the original on 27 May 2014. Retrieved 24 March 2009.
- ↑ "How to think like a Pythonista". Archived from the original on 23 March 2018. Retrieved 8 July 2020.
- ↑ "Whetting Your Appetite". The Python Tutorial. Python Software Foundation. Retrieved 20 February 2012.
- ↑ "Is Python a good language for beginning programmers?". General Python FAQ. Python Software Foundation. Retrieved 21 March 2007.
- ↑ "Myths about indentation in Python". Secnetix.de. Retrieved 19 April 2011.
- ↑ Guttag, John V. (2016-08-12). Introduction to Computation and Programming Using Python: With Application to Understanding Data. MIT Press. ISBN 978-0-262-52962-4.
- ↑ "Built-in Types". Retrieved 3 October 2019.
- ↑ "TIOBE Index". TIOBE - The Software Quality Company. Retrieved 7 March 2017.
- ↑ TIOBE Software Index (2015). "TIOBE Programming Community Index Python". Retrieved 10 September 2015.
- ↑ "Quotes about Python". Python Software Foundation. Retrieved 8 January 2012.
- ↑ "Organizations Using Python". Python Software Foundation. Retrieved 15 January 2009.
- ↑ "Python: the holy grail of programming". CERN Bulletin. CERN Publications (31/2006). 31 July 2006. Retrieved 11 February 2012.
- ↑ "Tornado: Facebook's Real-Time Web Framework for Python - Facebook for Developers". Facebook for Developers (به انگلیسی). Retrieved 2018-06-19.
- ↑ "What Powers Instagram: Hundreds of Instances, Dozens of Technologies". Instagram Engineering. Retrieved 27 May 2019.
- ↑ Shafer, Daniel G. (17 January 2003). "Python Streamlines Space Shuttle Mission Design". Python Software Foundation. Retrieved 24 November 2008.
- ↑ Taft, Darryl K. (5 March 2007). "Python Slithers into Systems". eWeek.com. Ziff Davis Holdings. Retrieved 24 September 2011.
- ↑ GitHub - reddit-archive/reddit: historical code from reddit.com., The Reddit Archives, 2019-03-19, retrieved 2019-03-20
- ↑ "Installers for GIMP for Windows - Frequently Asked Questions". 26 July 2013. Archived from the original on 17 July 2013. Retrieved 26 July 2013.
- ↑ "jasc psp9components". Archived from the original on 19 March 2008.
- ↑ "About getting started with writing geoprocessing scripts". ArcGIS Desktop Help 9.2. Environmental Systems Research Institute. 17 November 2006. Retrieved 11 February 2012.
- ↑ CCP porkbelly (24 August 2010). "Stackless Python 2.7". EVE Community Dev Blogs. CCP Games.
As you may know, EVE has at its core the programming language known as Stackless Python.
- ↑ Caudill, Barry (20 September 2005). "Modding Sid Meier's Civilization IV". Sid Meier's Civilization IV Developer Blog. Firaxis Games. Archived from the original on 2 December 2010.
we created three levels of tools … The next level offers Python and XML support, letting modders with more experience manipulate the game world and everything in it.
- ↑ "Python Language Guide (v1.0)". Google Documents List Data API v1.0. Archived from the original on 15 July 2010.
- ↑ "Immunity: Knowing You're Secure". Archived from the original on 16 February 2009.
- ↑ "Core Security". Core Security.
- ↑ Dean, Jeff; Monga, Rajat; et al. (9 November 2015). "TensorFlow: Large-scale machine learning on heterogeneous systems" (PDF). TensorFlow.org. Google Research. Retrieved 10 November 2015.
- ↑ Piatetsky, Gregory. "Python eats away at R: Top Software for Analytics, Data Science, Machine Learning in 2018: Trends and Analysis". KDnuggets. KDnuggets. Retrieved 30 May 2018.
- ↑ "Who is using scikit-learn? — scikit-learn 0.20.1 documentation". scikit-learn.org.
- ↑ "Natural Language Toolkit — NLTK 3.5b1 documentation". www.nltk.org.
- ↑ "Python Setup and Usage". Python Software Foundation. Retrieved 10 January 2020.
{{cite web}}
: نگهداری CS1: url-status (link) - ↑ van Rossum, Guido (5 June 2001). "PEP 7 – Style Guide for C Code". Python Enhancement Proposals. Python Software Foundation. Retrieved 24 November 2008.
- ↑ "CPython byte code". Docs.python.org. Retrieved 16 February 2016.
- ↑ "Python 2.5 internals" (PDF). Retrieved 19 April 2011.
- ↑ "An Interview with Guido van Rossum". Oreilly.com. Retrieved 24 November 2008.
- ↑ "PyPy compatibility". Pypy.org. Retrieved 3 December 2012.
- ↑ "speed comparison between CPython and Pypy". Speed.pypy.org. Retrieved 3 December 2012.
- ↑ Shaw, Anthony (2018-03-30). "Which is the fastest version of Python?". Hacker Noon. Retrieved 2019-12-20.
- ↑ "Application-level Stackless features — PyPy 2.0.2 documentation". Doc.pypy.org. Retrieved 17 July 2013.
- ↑ "Python-for-EV3". LEGO Education (به انگلیسی). Retrieved 17 April 2019.
- ↑ "Python on the Nokia N900". Stochastic Geometry. 2010-04-29.
- ↑ "google/grumpy". 10 April 2020 – via GitHub.
- ↑ "Projects". opensource.google.
- ↑ "Nuitka Home | Nuitka Home". nuitka.net (به انگلیسی). Retrieved 18 August 2017.
- ↑ Borderies, Olivier (24 January 2019). "Pythran: Python at C++ speed !". Medium.
- ↑ "Pythran — Pythran 0.9.5 documentation". pythran.readthedocs.io.
- ↑ Piotrowski, Przemyslaw (July 2006). "Build a Rapid Web Development Environment for Python Server Pages and Oracle". Oracle Technology Network. Oracle. Retrieved 12 March 2012.
- ↑ Batista, Facundo (17 October 2003). "PEP 327 – Decimal Data Type". Python Enhancement Proposals. Python Software Foundation. Retrieved 24 November 2008.
- ↑ Eby, Phillip J. (7 December 2003). "PEP 333 – Python Web Server Gateway Interface v1.0". Python Enhancement Proposals. Python Software Foundation. Retrieved 19 February 2012.
- ↑ Debill, Erik. "Module Counts". ModuleCounts. Retrieved 5 November 2019.
- ↑ "20+ Python Web Scraping Examples (Beautiful Soup & Selenium) - Like Geeks". likegeeks.com. 5 December 2017. Retrieved 12 March 2018.
- ↑ «GUI Programming in Python». The Python Wiki. ۲۰۱۰-۱۰-۱۰. دریافتشده در ۵ فروردین ۱۳۹۰.
- ↑ «Graphic User Interface FAQ». Python Software Foundation. مارس ۱۳, ۲۰۱۰. بایگانیشده از اصلی در ۶ اوت ۲۰۱۱. دریافتشده در ۵ فروردین ۱۳۹۰.
برای مطالعهٔ بیشتر
- Downey, Allen B. (May 2012). Think Python: How to Think Like a Computer Scientist (Version 1.6.6 ed.). ISBN 978-0-521-72596-5.
- Hamilton, Naomi (5 August 2008). "The A-Z of Programming Languages: Python". Computerworld. Archived from the original on 29 December 2008. Retrieved 31 March 2010.
- Lutz, Mark (2013). Learning Python (5th ed.). O'Reilly Media. ISBN 978-0-596-15806-4.
- Pilgrim, Mark (2004). Dive into Python. Apress. ISBN 978-1-59059-356-1.
- Pilgrim, Mark (2009). Dive into Python 3. Apress. ISBN 978-1-4302-2415-0.
- Summerfield, Mark (2009). Programming in Python 3 (2nd ed.). Addison-Wesley Professional. ISBN 978-0-321-68056-3.
پیوند به بیرون
- وبگاه رسمی
- پایتون در کرلی (براساس دیموز)
- پایتون (زبان برنامهنویسی)
- اختراعهای هلندی
- زبانهای اسکریپتنویسی
- زبانهای برنامهنویسی آموزشی
- زبانهای برنامهنویسی اسکریپتی
- زبانهای برنامهنویسی زنده
- زبانهای برنامهنویسی ساختهشده در ۱۹۹۱ (میلادی)
- زبانهای برنامهنویسی سطح بالا
- زبانهای برنامهنویسی شیءگرا
- زبانهای برنامهنویسی کلاس محور
- زبانهای برنامهنویسی ماشینی پویا
- فناوری اطلاعات در هلند
- کامپایلرها و مفسرهای آزاد
- نرمافزارهای آزاد چندسکویی