المحتويات
ما هي لغة بايثون
لغة بايثون (بالإنجليزية: Python) هي لغة برمجة مترجمة عالية المستوى للأغراض العامة. تم إنشاؤها من قبل جايدو فان روسم “Guido van Rossum” وتم إصدارها لأول مرة في عام 1991، وتؤكد فلسفة تصميم بايثون على إمكانية قراءة التعليمات البرمجية باستخدامها الملحوظ للمساحات البيضاء الهامة. وتهدف تراكيب لغتها ومنهجها الموجه للكائنات إلى مساعدة المبرمجين على كتابة كود منطقي واضح للمشاريع الصغيرة والكبيرة.
يتم كتابة لغة بايثون بشكل حيوي وبنظام جامع النفايات. وهي تدعم نماذج برمجة متعددة، بما في ذلك البرمجة الهيكلية (الخاصة والإجرائية)، والبرمجة الشيئية والبرمجة الوظيفية.
غالبًا ما توصف لغة بايثون بأنها لغة “البطاريات المضمّنة” نظرًا لمكتبتها القياسية الشاملة.
تم تصور بايثون في أواخر الثمانينيات كخليفة للغة (ABC). قدم إصدار (Python 2.0)، الذي صدر في عام 2000، ميزات مثل فهم القائمة ونظام جامع النفايات والقدرة على جمع الدورات المرجعية. كان إصدار (Python 3.0)، الذي تم إصداره في عام 2008، يحتوي على مراجعة رئيسية للغة غير متوافقة تمامًا مع الإصدارات السابقة، ولا يتم تشغيل الكثير من أكواد (Python 2) بدون تعديل على (Python 3).
تم إيقاف إصدار (Python 2)، رسميًا في 1 يناير 2020، ولم يتم إصدار تصحيحات أمنية وتحسينات أخرى لها.
مع نهاية حياة (Python 2)، يتم دعم (Python 3.5.x) والإصدارات الأحدث فقط.
تتوفر مترجمات بايثون (بالإنجليزية: Python Compilers) للعديد من أنظمة التشغيل.
يقوم مجتمع عالمي من المبرمجين بتطوير وصيانة مترجم بايثون باسم (CPython)، وهو مرجع مفتوح المصدر. مؤسسة برمجيات بايثون (Python Software Foundation)، منظمة غير ربحية، هي التي تدير الموارد لتطوير لغة برمجة بايثون والمترجم الخاص بها (CPython).
نشأة لغة بايثون
تم إنشاء لغة بايثون في أواخر الثمانينيات بواسطة “فان روسم” في معهد أبحاث المعلوماتية (Centrum Wiskunde & Informatica CWI) في هولندا، واعتُبرت كخليفة للغة (ABC)، (المستوحاة من SETL). ولغة بايثون قادرة على التعامل والتفاعل مع نظام تشغيل الأميبا (Amoeba OS)، (أميبا: هو نظام تشغيل نويّي موزع مفتوح المصدر طوّره أندرو تانينباوم وآخرون من جامعة فيرجي، ويهدف المشروع إلى إقامة نظام تشارك زمني يجعل شبكة كاملة من الحواسيب تبدو للمستخدم الفرد وكأنه جهاز واحد. يبدو أن تطوير المشروع قد تأخر إذ أن آخر تحديث في ملفات الإصدار 5.3 تم في 21 أبريل 2001.)، وبدأ تنفيذها في ديسمبر 1989. تحمّل فان روسم المسؤولية الكاملة عن المشروع، بصفته المطور الرئيسي، حتى 12 يوليو 2018، عندما أعلن عن “إجازته الدائمة” والتخلي عن مسؤولياته بعد أن قضى فترة طويلة من التزامه بالعمل بصفته صانع القرار الرئيسي للمشروع. ويشارك الآن كعضو في مجلس التوجيه المكون من خمسة أشخاص لقيادة المشروع.
تم إصدار (Python 2.0) في 16 أكتوبر 2000، مع العديد من الميزات الرئيسية الجديدة، بما في ذلك:
إصدار بايثون Python 2.0
اشتمل هذا الإصدار على بعض الميزات الجديدة، ومنها:
- جامع النفايات (بالإنجليزية: Garbage Collector): في علوم الكمبيوتر، هي عملية جمع الموارد غير المستخدمة في ذاكرة الحاسب الرام (RAM): هي شكل من أشكال تنظيم ذاكرة الحاسب بشكل تلقائي حيث أن عملية جمع النفايات تهدف إلى البحث عن الموارد غير المستخدمة في الذاكرة ومن ثم إزالتها من أجل الحصول على مساحة فارغة من الذاكرة لاستخدامها في أعمال أخرى. الذي يقوم بهذه العملية يسمى جامع النفايات.
- اكتشاف الدورة (بالإنجليزية: Cycle-Detecting): في علوم الكمبيوتر، يُعد اكتشاف الدورة، أو تحديدها، مشكلة خوارزمية أو من مسائل الخوارزميات التي تهدف إلى العثور على دورة في سلسلة من قيم الدوال المتكررة. وبالنسبة لأي دالة (F) تقوم بتعيين (S) لمجموعة محدودة إلى نفسها، وأي قيمة أولية (x) في (S)، تسلسل قيم الدوال المتكررة.
- دعم (Unicode): هو أحد معايير تكنولوجيا المعلومات للتشفير والتمثيل والتعامل المتناسق للنص المعبر عنه في معظم أنظمة الكتابة العالمية. يتم الحفاظ على المعيار بواسطة (Unicode Consortium)، واعتبارًا من مارس 2020، يحتوي أحدث إصدار (Unicode 13.0)، على مرجع من 143,924 حرفًا يغطي 154 نصًا حديثًا وتاريخيًا، بالإضافة إلى مجموعات رموز متعددة ورموز تعبيرية. تتم مزامنة مجموعة أحرف معيار (Unicode) مع (ISO/IEC 10646)، وكلاهما متطابقان في التعليمات البرمجية.
إصدار بايثون Python 3.0
تم إصدار (Python 3.0) في 3 ديسمبر 2008. وقد كان مراجعة رئيسية للغة غير المتوافقة تمامًا مع الإصدارات السابقة.
تم إرجاع العديد من ميزات الإصدار (Python 3.0) الرئيسية إلى سلسلة إصدارات (Python 2.6.x) و(Python 2.7.x)، وتتضمن إصدارات (Python 3) الأداة المساعدة (2to3)، والتي تعمل تلقائيًا (جزئيًا على الأقل) على ترجمة شفرة (Python 2) إلى (Python 3).
تم تحديد تاريخ انتهاء الصلاحية لإصدار (Python 2.7) في عام 2015، ثم تم تأجيله إلى عام 2020 خوفًا من عدم إمكانية نقل مجموعة كبيرة من التعليمات البرمجية الموجودة بسهولة إلى إصدار (Python 3).
أصل تسمية لغة بايثون
اسم لغة بايثون مشتق من مجموعة الكوميديا البريطانية مونتي بايثون أو (بالإنجليزية: Monty Python)، التي استمتع بها مُنشئ محتوى بايثون جويدو “فان روسوم” أثناء تطوير اللغة. وتظهر مراجع مونتي بايثون بشكل متكرر في كود وثقافة بايثون. على سبيل المثال، المتغيرات (metasyntactic) المستخدمة غالبًا في أدب بايثون هي رموز (Spam) و(Egg) بدلا من الرموز التقليدية المستخدمة في الرياضيات.
وتحتوي وثائق بايثون الرسمية أيضًا على مراجع مختلفة لروتين مونتي بايثون.
تُستخدم البادئة (Py) لإظهار أن شيئًا ما مرتبط ببايثون، وتتضمن أمثلة استخدام هذه البادئة في أسماء تطبيقات بايثون أو المكتبات (Pygame)، وهو ربط (SDL) ببايثون (يُستخدم عادة لإنشاء الألعاب)، (PyQt) و(PyGTK)، التي تربط (Qt) و(GTK) ببايثون على التوالي، و(PyPy) تطبيق بايثون مكتوب في الأصل باستخدام لغة بايثون.
مميزات لغة بايثون
لغة بايثون هي لغة برمجة متعددة النماذج، وهي تدعم البرمجة الشيئية (بالإنجليزية: Object Oriented Programming) والبرمجة المهيكلة (بالإنجليزية: Structured Programming) بشكل كامل، والعديد من ميزاتها تدعم البرمجة الوظيفية (بالإنجليزية: Functional Programming) والبرمجة جانبية المنحى (بالإنجليزية: Aspect-Oriented Programming)، بما في ذلك البرمجة الفوقية (بالإنجليزية: Metaprogramming) والكائنات الفوقية (بالإنجليزية: Metaobjects) (الأساليب السحرية). كما تدعم العديد من النماذج الأخرى عبر الامتدادات، بما في ذلك التصميم بالعقود (بالإنجليزية: Design by Contract) والبرمجة المنطقية (بالإنجليزية: Logic Programming).
تستخدم لغة بايثون نظام الكتابة الديناميكية أو (بالإنجليزية: Dynamic Typing)، ومزيجًا من العدّ المرجعي وجامع النفايات واكتشاف الدورات لإدارة الذاكرة. كما تتميز أيضًا بتحليل الاسم الديناميكي (الربط المتأخر)، الذي يربط الطرق بأسماء المتغيرات أثناء تنفيذ البرنامج.
ويقدم تصميم بايثون بعض الدعم للبرمجة الوظيفية، كما أن لديه وظائف التصفية (بالإنجليزية: Filter)، والتعيين والتصغير، وتعبيرات فهم القائمة والقواميس والمجموعات والمولّد (بالإنجليزية: Generator).
تحتوي المكتبة القياسية على نموذجي (itertools) و(functools)، التي تنفذ أدوات وظيفية مستعارة من لغات البرمجة (Haskell) و(Standard ML).
فلسفة لغة بايثون
تم تلخيص فلسفة لغة بايثون الأساسية في الوثيقة (The Zen of Python PEP 20).
وتتضمن فلسفة اللغة مجموعة من الأمثال والأقوال المأثورة مثل:
- الجميل أفضل من القبيح.
- صريح أفضل من ضمني.
- البسيط أفضل من المجمع.
- المركّب أفضل من المعقّد.
- قابلية القراءة أمر مهم.
وبدلا من دمج جميع وظائفها ضمنيًا، تم تصميم لغة بايثون لتكون قابلة للتوسعة بدرجة كبيرة.
هذه الوحدة النمطية المدمجة جعلتها شائعة بشكل خاص كوسيلة لإضافة واجهات قابلة للبرمجة إلى التطبيقات الحالية.
تنبأت رؤية فان روسم في إنشاء لغة أساسية صغيرة مع مكتبة قياسية كبيرة ومترجم قابل للتوسيع بأنه أوجد لغة سهلة مقارنة بالإحباطات التي واجهت لغة ABC التي تبنّت النهج المعاكس.
تسعى بايثون جاهدة إلى بناء قواعد نحوية أو (بالإنجليزية: Syntax) أبسط وأقل تشوشًا مع منح المطورين خيارًا في منهجية البرمجة الخاصة بهم. وعلى النقيض من شعار لغات بيرل (Perl) “هناك أكثر من طريقة للقيام بذلك”، فإن بايثون تتبنى “يجب أن يكون هناك فلسفة تصميم واحدة – ويفضل أن تكون واحدة فقط – وطريقة واضحة للقيام بذلك”.
بيرل: هي عائلة مكونة من لغتي برمجة ديناميكية عالية المستوى للأغراض العامة ومفسرة. يُشير مصطلح “Perl” إلى Perl 5، ولكنه أشار أيضًا من عام 2000 إلى عام 2019 إلى “اللغة الشقيقة” المُعاد تصميمها، Perl 6، قبل تغيير اسم الأخير رسميًا إلى Raku في أكتوبر 2019.
كتب أليكس مارتيلي، وهو زميل في مؤسسة برمجيات بايثون ومؤلف كتاب بايثون، أن:
“وصف شيء ما بأنه “ذكي” لا يُعتبر مجاملة في ثقافة بايثون”.
أليكس مارتيلي، مؤلف كتاب بايثون
فلسفة التطوير
يسعى مطورو بايثون جاهدين لتجنب التحسين المبكر، ويرفضون التصحيحات للأجزاء غير الحرجة من تطبيق سي بايثون (CPython)، المترجم المرجعي الذي من شأنه أن يوفر زيادات هامشية في السرعة على حساب الوضوح. وعندما تكون السرعة مهمة، يمكن لمبرمج لغة بايثون نقل الوظائف الحرجة إلى الوحدات النمطية الإضافية المكتوبة بلغات مثل سي (C)، أو استخدام (PyPy)، وهو مترجم فوري. (Cython) مُتاح أيضًا، والذي يترجم نص بايثون إلى لغة (C) ويقوم بإجراء اتصال (API) مباشرة من (C) إلى مترجم بايثون.
أحد الأهداف المهمة لمطوري بايثون هي الحفاظ على المتعة في الاستخدام.
ينعكس هذا في اسم اللغة، الذي جاء تكريمًا لمجموعة الكوميديا البريطانية مونتي بايثون، وفي مناهج مرحة أحيانًا للبرامج التعليمية والمواد المرجعية، مثل الأمثلة التي تُشير إلى رموز من الرسم المشهور لمونتي بايثون بدلا من رموز الرياضيات التقليدية (س، ص).
من اللافتات الشائعة في مجتمع بايثون، والتي يمكن أن يكون لها مجموعة واسعة من المعاني المتعلقة بنمط البرنامج، القول بأن الشفرة هي بيثونية (بالإنجليزية: Pythonic)، ويعني ذلك بأنها تستخدم مصطلحات لغة بايثون بشكل جيد، وأنها طبيعية أو تُظهر طلاقة في اللغة، وتتوافق مع فلسفة بايثون المبسطة والتأكيد على سهولة القراءة. في المقابل، فإن الشفرة البرمجية التي يصعب فهمها أو التي تُقرأ مثل النسخ التقريبي من لغة برمجة أخرى تُسمى لغة غير بيثونية (بالإنجليزية: Unpythonic).
كما يُطلق على مستخدمي لغة بايثون وخبرائها ومحبيها اسم بيثونيين.
التركيبات النحوية والدلالات
التركيبات النحوية والدلالات أو (بالإنجليزية: Syntax and Semantics)، ويُقصد بها القواعد النحوية والدلالية التي تحكم كتابة البرامج بلغة بايثون.
من المفترض أن تكون لغة سهلة القراءة. تنسيقاتها واضحة ومرتبة.
وغالبًا ما تستخدم الكلمات الرئيسية الإنجليزية، في حين تستخدم لغات أخرى علامات الترقيم.
وعلى عكس العديد من اللغات الأخرى، لا تستخدم بايثون الأقواس المعقوفة لتحديد الكتل، وفيها الفواصل المنقوطة بعد العبارات اختيارية، وهي لديها استثناءات نحوية (بالإنجليزية: Syntax Exceptions) أقل وحالات خاصة أقل من لغات برمجة (C) أو (Pascal).
1. المسافة الفارغة
تستخدم بايثون المسافة الفارغة البيضاء لتحديد الكتل، بدلا من الأقواس المعقوفة أو الكلمات الرئيسية.
تأتي الزيادة في المسافة الفارغة بعد جمل برمجية معينة؛ يُشير الانخفاض في المسافة الفارغة إلى نهاية الكتلة الحالية.
وبالتالي، فإن البنية المرئية للبرنامج تمثل بدقة البنية الدلالية للبرنامج.
تُسمى هذه الميزة أحيانًا القاعدة الخارجية، التي تشترك فيها بعض اللغات الأخرى، ولكن في معظم اللغات، لا تحتوي المسافة الفارغة على أي معنى أو دلالة.
2. الجمل البرمجية وتدفق التحكم
تتضمن الجمل البرمجية وتدفقات التحكم (بالإنجليزية: Statements and Control Flow) في لغة بايثون (من بين أمور أخرى):
بيان المهمة (الرمز المميز ‘=’، علامة يساوي).
يعمل هذا بشكل مختلف عن لغات البرمجة الحتمية التقليدية، وهذه الآلية الأساسية (بما في ذلك طبيعة نسخة بايثون من المتغيرات) تضيء العديد من الميزات الأخرى للغة. التعيين في لغة C، على سبيل المثال، x=2، يُترجم إلى “اسم المتغير المكتوب x يتلقى نسخة من القيمة الرقمية 2”.
يتم نسخ القيمة (اليمنى) في موقع تخزين مخصص يكون اسم المتغير (الأيسر) هو العنوان الرمزي.
والذاكرة المخصصة للمتغير كبيرة بما يكفي (يحتمل أن تكون كبيرة جدًا) للنوع المعلن.
في أبسط حالة لتعيين بايثون، باستخدام نفس المثال، x=2، يترجم إلى “اسم (عام) x يتلقى مرجعًا إلى كائن منفصل ومخصص ديناميكيًا من النوع الرقمي (int) من النوع 2.” هذا يسمى ربط الاسم بالكائن. نظرًا لأن موقع تخزين الاسم لا يحتوي على القيمة المشار إليها، فمن غير المناسب تسميته متغيرًا. قد تتطور الأسماء لاحقًا في أي وقت إلى كائنات من أنواع مختلفة اختلافًا كبيرًا، بما في ذلك السلاسل والإجراءات والكائنات المعقدة مع البيانات والأساليب ، إلخ.
التخصيصات المتتالية لقيمة مشتركة لأسماء متعددة
على سبيل المثال:
س=2 ؛ ص=2؛ ع=2
ينتج عنها تخصيص مساحة تخزين (على الأكثر) لثلاثة أسماء وكائن رقمي واحد، يتم ربط جميع الأسماء الثلاثة به. نظرًا لأن الاسم هو حامل مرجعي عام، فمن غير المعقول ربط نوع بيانات ثابت به.
ومع ذلك، في وقت معين، سيتم ربط الاسم بكائن ما، والذي سيكون له نوع؛ وبالتالي هناك كتابة ديناميكية.
عبارة If
وعبارة If التي تُنفذ بشكل مشروط كتلة من التعليمات البرمجية، إلى جانب عبارات أخرى مثل (Else) و(Elif=اختصار عبارة ElseIf).
عبارة For
وعبارة (For) التي تُستخدم مع كائن قابل للتكرار، تلتقط كل عنصر في متغير محلي لاستخدامه بواسطة الكتلة المرفقة.
عبارة While
وعبارة (While) التي تنفذ كتلة من التعليمات البرمجية طالما أن حالتها صحيحة.
عبارة Try
وعبارة (Try) التي تسمح بالتقاط الاستثناءات المرفوعة في مقطع التعليمات البرمجية المرفقة والتعامل معها باستثناء البنود؛ كما تضمن تشغيل رمز التنظيف في كتلة أخيرة دائمًا بغض النظر عن كيفية خروج الكتلة.
عبارة Rise
وتستخدم عبارة (Rise) لرفع استثناء محدد أو إعادة رفع استثناء تم اكتشافه.
عبارة Class
وعبارة (Class) التي تقوم بتنفيذ كتلة من التعليمات البرمجية وتربط مساحة الاسم المحلية الخاصة بها بفئة، لاستخدامها في البرمجة الموجهة للكائنات.
عبارة Def
وعبارة Def التي تحدد دالة أو طريقة.
عبارة With
وعبارة (With) التي ترفق كتلة التعليمات البرمجية داخل مدير السياق (على سبيل المثال، الحصول على قفل قبل تشغيل كتلة التعليمات البرمجية وإطلاق القفل بعد ذلك، أو فتح ملف ثم إغلاقه)، والسماح لاكتساب الموارد هو سلوك يشبه التهيئة (RAII) ويحل محل محاولة شائعة / لغة أخيرة.
عبارة Break
وعبارة (Break) والتي تُستخدم للخروج من الحلقة (Loop).
عبارة Continue
وعبارة (Continue) والتي تُستخدم لتخطي التكرار والاستمرار مع العنصر التالي.
عبارة Pass
وعبارة (Pass) والتي تعمل بمثابة النفي (NOP). وهي لازمة نحويًا لإنشاء كتلة تعليمات برمجية فارغة.
عبارة Assert
وعبارة (Assert) المستخدمة أثناء التصحيح للتحقق من الشروط التي يجب تطبيقها.
عبارة Yield
وعبارة (Yield) والتي تُرجع قيمة من الدالة المولدة. واعتبارًا من إصدار (Python 2.5).
هذه العبارة هي أيضًا عامل (بالإنجليزية: Operator) يُستخدم هذا النموذج لتنفيذ روتين مشترك (بالإنجليزية: Coroutines).
عبارة Import
عبارة (Import) هي التي تُستخدم لاستيراد الوحدات النمطية التي يمكن استخدام وظائفها أو متغيراتها في البرنامج الحالي.
هناك ثلاث طرق لاستخدام الاستيراد:
import <module name> [as <alias>]
from <module name> import
from <module name> import <definition 1> [as <alias 1>], <definition 2> [as <alias 2>], ...
.
عبارة الطباعة Print
تم تغيير عبارة الطباعة (Print) إلى وظيفة الطباعة:
Print()
اعتبارًا من إصدار (Python 3).
3. التعبيرات في لغة بايثون
بعض تعبيرات لغة بايثون تشبه تعبيرات لغات برمجة مثل لغة (C) ولغة (Java)، بينما البعض الآخر لا يشبهها. وفيما يلي تفاصيل تعبيرات لغة بايثون:
تعبيرات الجمع والطرح والضرب
تعبيرات الجمع والطرح والضرب في بايثون هي نفسها، ولكن يختلف سلوك القسمة.
هناك نوعان من القسمة في بايثون:
قسمة السقف (أو قسمة العدد الصحيح) ويُرمز لها بالرمز: // (في الرياضيات وفي علم الحاسوب، دالتا الجزء الصحيح والسقف، تربطان عددًا حقيقيًا ما بأكبر عدد صحيح سابق أو أصغر عدد صحيح تالي على التوالي، حيث: الجزء الصحيح لعدد حقيقي ما x هو أكبر عدد صحيح ليس أكبر من x. فصحيح العدد 2.6 هو 2، أي أكبر عدد صحيح ليس أكبر من 2.6. بينما سقف العدد الحقيقي x فهو أصغر عدد صحيح ولكن ليس أصغر من x).
والنوع الثاني هو التقسيم العائم ويرمز لها بالرمز /.
أضافت بايثون أيضًا عامل التشغيل الأسي **.
عوامل جديدة
اعتبارًا من إصدار (Python 3.5)، تم تقديم عامل الإقحام الجديد (@ infix) (ترميز ضمني Infix الترميز المقحم أو صيغة التوسيط، وهي أشهر أساليب كتابة العمليات الحسابية والرياضية، حيث أن رمز العملية يتوسط حدّيها مثل 4+5، توجد صيغتان أخريتان لكتابة العمليات وهي أقل شهرة، أولاهما صيغة الإسباق حيث يسبق رمز العملية حدّيها مثل + 4 5، وهذه الصيغة متداولة في المعلوماتيات وقد اشتهرت من خلال لغة البرمجة ليسب.)، الغرض منه هو أن يستخدم من قبل المكتبات مثل (NumPy) لضرب المصفوفات.
اعتبارًا من إصدار (Python 3.8)، تم إدخال بناء التعبير (: =)، الذي يطلق عليه “العامل الفظّ”. وهو يُستخدم في تعيين القيم لمتغيرات كجزء من تعبير أكبر.
في لغة بايثون، التعبير (==) يقارن بحسب القيمة، بالمقابل، في لغة (Java) التي تقارن الأعداد بحسب القيمة والكائنات بحسب المرجع. (يمكن إجراء مقارنات القيمة في (Java) على الكائنات بطريقة:
equals()
ويمكن استخدام عامل بايثون لمقارنة هويات الكائن (المقارنة حسب المرجع).
في بايثون قد يتم تقييد المقارنات، على سبيل المثال:
a <= b <= c
تستخدم بايثون الكلمات (And, Or) وتستخدم عواملها المنطقية بدلا من الرموز &&، ||، ! المستخدمة في (Java) و(C).
تعبير فهم القائمة
بايثون لديها نوع من التعبير يسمى فهم القائمة أو (بالإنجليزية: List Comprehension)، وفي علوم الكمبيوتر هو بناء نحوي متوفر في بعض لغات البرمجة لإنشاء قائمة بناءً على القوائم الموجودة. وهي تتبع شكل تدوين مجموعة أدوات الرياضيات بشكل مختلف عن استخدام وظائف الخريطة والفلاتر.). قام إصدار (Python 2.4) بفهم القائمة الموسعة في تعبير أكثر عمومية يطلق عليه تعبير المولد أو (بالإنجليزية: Generator).
يتم تنفيذ وظائف مجهولة (بالإنجليزية: Anonymous Functions) باستخدام تعبيرات لامدا (بالإنجليزية: Lambda Expressions).
ومع ذلك، فإن استخدامها يكون محدودًا في أن المكون الواحد لا يمكن أن يحوي سوى تعبير واحد من هذا النوع.
تتم كتابة التعبيرات الشرطية في بايثون بالشكل:
x if c else y
وهذا الترتيب يختلف من حيث ترتيب المعاملات c, x, y الشائعة للعديد من اللغات الأخرى، مثل:
if c , x else y
القوائم والصفوف
تُميز بايثون بين القوائم والصفوف أو (بالإنجليزية: Lists and Tuples)، القوائم وتُكتب على شكل [1, 2, 3]، وهي قابلة للتغيير، ولا يمكن استخدامها كمفاتيح قواميس، لأنه يجب أن تكون مفاتيح القواميس ثابتة في بايثون. (في البرمجة الوظيفية الموجهة للكائنات، فإن الكائن غير القابل للتغيير هو كائن لا يمكن تعديل حالته بعد إنشائه. هذا على النقيض من الكائن القابل للتغيير، والذي يمكن تعديله بعد إنشائه. في بعض الحالات، يُعتبر الكائن غير قابل للتغيير حتى إذا تغيرت بعض السمات المستخدمة داخليًا، ولكن حالة الكائن تبدو دون تغيير من وجهة نظر خارجية. على سبيل المثال، يمكن اعتبار الكائن الذي يستخدم التذكير للتخزين المؤقت لنتائج الحسابات باهظة الثمن كائنًا غير قابل للتغيير).
وتتم كتابة الصفوف على شكل (1, 2, 3)، وهي غير قابلة للتغيير وبالتالي يمكن استخدامها كمفاتيح قواميس، شريطة أن تكون جميع عناصر الصف غير قابلة للتغيير. يمكن استخدام عامل التشغيل (+) لتسلسل مجموعتين من الصفوف، والتي لا تعدل محتوياتها بشكل مباشر، بل تنتج مجموعة جديدة تحتوي على عناصر كل من الصفوف المقدمة. وبالتالي، بالنظر إلى المتغير (t) الذي يساوي مبدئيًا (1, 2, 3)، فإن تنفيذ:
t = t + (4, 5)
يقيِّم أولا:
t + (4, 5)
والذي ينتج (1, 2, 3, 4, 5)، والتي يتم تعيينها بعد ذلك إلى t، وبالتالي تعديل محتويات (t) بشكل فعّال، مع التوافق مع الطبيعة الثابتة للصفوف.
والأقواس اختيارية في حالة الصفوف بشرط أن تكون ضمن سياقات لا لبس فيها.
ميزة تفريغ التسلسل
تتميز بايثون بالقدرة على تفريغ التسلسل الذي يتم فيه ربط تعبيرات متعددة، كل منها يتم تقييمه إلى أي شيء يمكن تعيينه، مثل أن يتم تعيينه إلى (متغير، خاصية قابلة للكتابة، وما إلى ذلك)، بطريقة مماثلة لتلك التي تُشكل مكونات الصف الحرفية، وبشكل عام، يتم وضعها على الجانب الأيسر من علامة المساواة في بيان المهمة. وتتوقع العبارة وجود كائن قابل للتكرار (بالإنجليزية: Iterable Object) على الجانب الأيمن من علامة المساواة ينتج نفس عدد القيم التي تحتوي عليها التعبيرات القابلة للكتابة عند تكرارها من خلالها، والتي من المؤكد أنه سوف تتكرر خلالها، مع تعيين كل من القيم المنتجة في الطرف المقابل على يسار التعبير.
السلاسل
تحتوي بايثون على عامل تشغيل تنسيق السلسلة (String Format (٪)).
هذه الوظائف مماثلة لسلاسل تنسيق (Printf) في لغة C، على سبيل المثال:
"spam=%s eggs=%d" % ("blah", 2)
المكافئة لـ
"spam=blah eggs=2".
في إصدار (Python 3) و(Python +2.6)، تم استكمال ذلك بطريقةformat()
لفئة str
، على سبيل المثال:
"spam={0} eggs={1}".format("blah", 2)
وفي إصدار (Python 3.6) تمت إضافة (f-strings):
blah = "blah"; eggs = 2; f'spam={blah} eggs={eggs}'
تحتوي بايثون على أنواع مختلفة من السلاسل الحرفية: (سلسلة حرفية أو سلسلة مجهولة نوع حرفية في البرمجة لتمثيل قيمة سلسلة داخل التعليمات البرمجية المصدر لبرنامج كمبيوتر. في أغلب الأحيان في اللغات الحديثة، يكون هذا تسلسلا مقتبسًا من الأحرف، كما هو الحال في:
x =” foo”
حيث يكون “foo” عبارة عن سلسلة حرفية ذات قيمة (foo). الاقتباسات ليست جزءًا من القيمة، ويجب على المرء استخدام طريقة مثل تسلسل الهروب لتجنب مشكلة تصادم المحددات والسماح للمُحددات نفسها بتضمينها في سلسلة. ومع ذلك، هناك العديد من الترميزات البديلة لتحديد حرفية السلسلة، ولا سيما الحالات الأكثر تعقيدًا، ويعتمد الترميز الدقيق على لغة البرمجة الفردية المعنية.
ومع ذلك، هناك بعض الإرشادات العامة التي تتبعها معظم لغات البرمجة الحديثة:
أنواع السلاسل الحرفية
- سلاسل محددة بعلامات اقتباس مفردة أو مزدوجة. على عكس (Unix Shell)، هو مترجم لسطر الأوامر يوفر واجهة مُستخدم لسطر الأوامر لأنظمة تشغيل تشبه (Unix. Shell)، هي لغة أوامر تفاعلية ولغة برمجة نصية، ويستخدمها نظام التشغيل للتحكم في تنفيذ النظام باستخدام نصوص (shell). تعمل اللغات المتأثرة بـ (Perl) و(Perl) وعلامات الاقتباس المفردة وعلامات الاقتباس المزدوجة بشكل متماثل. يستخدم كلا النوعين من الخط المائل (\) كحرف هروب. أصبحت عملية الاستيفاء في السلسلة متاحة في إصدار (Python 3.6) كـ “سلسلة حرفية منسقة”.
- سلاسل ثلاثية الاقتباس، تبدأ وتنتهي بسلسلة من ثلاث علامات اقتباس مفردة أو مزدوجة. قد تمتد على عدة أسطر وتعمل مثل المستندات الموجودة في (Shell) و(Perl) و(Ruby).
- أصناف السلسلة الخام، يُشار إليها بادئة السلسلة الحرفية بحرف r. لا يتم تفسير تسلسل الهروب. ومن ثم تكون السلاسل الأولية مفيدة حيث تكون الخطوط المائلة العكسية شائعة، مثل التعبيرات العادية والمسارات بنمط ويندوز (Windows). قارن “@ -quoting” في (C#).
فهرسة المصفوفات
تحتوي لغة برمجة بايثون على تعبيرات فهرسة المصفوفات وتعبيرات إنتاج شرائح المصفوفات ووضعها في قوائم، يُشار إليها بالصيغ:
a[key]
, a[start:stop]
or a[start:stop:step]
والفهارس ذات أساس صفري، والفهارس السلبية تبدأ من نهاية المصفوفة. وتأخذ الشرائح عناصر من بداية الفهرس إلى نهايته، ولكن لا تتضمن نهايته. تسمح معلمة الشريحة الثالثة، المسماة (Step) أو (Stride)، بتخطي العناصر وعكسها. قد يتم حذف فهارس الشرائح، على سبيل المثال، ترجع [:] نسخة من القائمة بالكامل. كل عنصر في الشريحة هو نسخة ضحلة.
التمييز بين التعبيرات والجمل البرمجية
في بايثون تم فرض التمييز وبطريقة صارمة بين التعبيرات والجمل البرمجية، على عكس اللغات الأخرى مثل (Common Lisp) أو (Scheme) أو (Ruby). وهذا أدى إلى تكرار بعض الوظائف.
فمثلا:
قوائم الفهم مقابل الحلقات إذا كان كذا .. (List Comprehensions vs. for-loops)
التعبيرات الشرطية مقابل القطع (Conditional Expressions vs. if blocks)
الدالات المضمنة eval()
vs. exec()
built-in functions، الأولى للتعبيرات، والثانية للجمل البرمجية.
لا يمكن أن تكون الجمل البرمجية جزءًا من التعبيرات، لذلك لا يمكن أن تحتوي القائمة وغيرها من تعبيرات لامدا، وكلها تعبيرات، على جمل برمجية. مثال ذلك في حالة بيان التخصيص مثل a = 1 لا يمكن أن يُشكل جزءًا من التعبير الشرطي لعبارة شرطية. هذا له ميزة تجنب خطأ C الكلاسيكي عن خطأ في عامل التعيين (=) لعامل المساواة (==) في الظروف: إذا كان (c = 1) {…} صالحًا من الناحية النحوية (ولكن ربما غير مقصود) رمز C ولكن إذا كان c = 1: … يسبب خطأ في بناء الجملة في بايثون.
4. الكتابة في لغة بايثون
تستخدم بايثون أسلوب كتابة البطة (بالإنجليزية: Duck Typing) لتحديد ما إذا كان يمكن استخدام كائن لغرض معين. مع الكتابة العادية، يتم تحديد الملاءمة حسب نوع الكائن. في كتابة البط، يتم تحديد ملاءمة الكائن من خلال وجود طرق وخصائص معينة، بدلا من نوع الكائن نفسه.) عن طريق تحديد أسماء للكائنات وليس أسماء للمتغيرات. لا يتم التحقق من قيود النوع في وقت الترجمة (بالإنجليزية: Compiling Time)؛ بدلا من ذلك، قد تفشل العمليات على كائن ما، مما يدل على أن الكائن المحدد ليس من النوع المناسب. على الرغم من كتابتها ديناميكيًا، يتم كتابة البرامج في بايثون بدقة، مما يمنع العمليات غير المحددة جيدًا (على سبيل المثال، إضافة رقم إلى سلسلة) بدلا من محاولة فهمها بصمت.
تسمح لغة بايثون للمبرمجين بتحديد أنواعهم الخاصة أو (بالإنجليزية: Types) باستخدام الفئات (بالإنجليزية: Classes)، والتي غالبًا ما تستخدم للبرمجة الموجهة للكائنات. يتم إنشاء مثيلات جديدة من الفئات عن طريق استدعاء الفئة.
على سبيل المثال:
SpamClass()
أو
EggsClass()
والفئات هي أمثلة من نوع الكائنات الفوقية (Metaclass) (وهي تُعبّر عن نفسها هنا) (في البرمجة الشيئية، الفئة الفوقية هي فئة تكون مثيلاتها فئات. تمامًا كما تحدد فئة عادية سلوك كائنات معينة، تحدد طبقة (Metaclass) سلوك فئات معينة وحالاتها. لا تدعم جميع لغات البرمجة الشيئية الكائنات الأولية. من بين أولئك الذين يفعلون ذلك، يختلف مدى تجاوز (Metaclasses) لأي جانب معين من جوانب السلوك الطبقي. يمكن تنفيذ (Metaclasses) من خلال جعل الطبقات من الدرجة الأولى، وفي هذه الحالة يكون (Metaclass) ببساطة كائنًا يبني الطبقات. تحتوي كل لغة على بروتوكول الكائنات الفوقية (Metaobject) الخاص بها، ومجموعة من القواعد التي تحكم كيفية تفاعل الكائنات والفئات والفئات الفوقية، مما يسمح بالبرمجة والتأمل.
أنواع الفئات
قبل الإصدار (Python 3.0) كان لدى بايثون نوعين من الفئات: الطراز القديم والطراز الجديد. وبناء جملة في كلا النمطين هو نفسه، والفرق هو ما إذا كان كائن الفئة موروثًا، بشكل مباشر أو غير مباشر (جميع فئات النمط الجديد ترث من الكائن وهي أمثلة من النوع). في إصدارات (Python 2) من (Python 2.2) وما بعده، يمكن استخدام كلا النوعين من الفئات. تم التخلص من فصول الطراز القديم في إصدار (Python 3.0).
الخطة طويلة المدى في تطوير بايثون هي دعم الكتابة التدريجية، واعتبارًا من إصدار (Python 3.5)، تسمح بنية اللغة بتحديد أنواع ثابتة ولكن لا يتم التحقق منها في التنفيذ الافتراضي للمترجم (CPython). ويدعم مدقق اختياري من النوع الثابت المسمى (mypy) التحقق من نوع ووقت الترجمة.
5. الرياضيات
تحتوي لغة برمجة بايثون على الرموز المعتادة للمعاملات الحسابية الجمع والطرح والضرب والقسمة العادية (+ ، – ، * ، /)، وعامل قسمة السقف (//) وعامل المتبقي (٪)، (حيث يمكن أن يكون الباقي سالبًا، على سبيل المثال 4 % -3 == -2). لديها أيضًا عامل الأسس **، على سبيل المثال 5**3 == 125) ومعامل ضرب المصفوفات @. تعمل هذه العوامل كما هو الحال في الرياضيات التقليدية؛ باستخدام نفس قواعد الأسبقية، يمكن أن تكون معلومات المعاملين (+ و – غير متحيزة أيضًا لتمثيل الأرقام الموجبة والسالبة على التوالي).
ينتج عن القسمة بين الأعداد نتائج فاصلة عائمة. تغير سلوك القسمة بشكل كبير بمرور الوقت:
استخدم إصدار (Python 2.1) والإصدارات السابقة له سلوك القسمة C. عامل التشغيل (/) هو المستخدم في القسمة الصحيحة إذا كان كلا الطرفين أعدادًا صحيحة، وتُستخدم الفاصلة العائمة في خلاف ذلك. وفي القسمة الصحيحة يكون التقريب باتجاه الصفر، على سبيل المثال: 7/3 == 2
, -7/3 == -2
.
في إصدار (Python 2.2) تم تغيير القسمة الصحيحة لتُصبح تقريبًا نحو اللانهاية السالبة، على سبيل المثال: 7/3 == 2
, -7/3 == -3
. كما تم إدخال عامل تقسيم السقف (//)، حيث: 7//3 == 2
, -7//3 == -3
, 7.5//3 == 2.0
, -7.5//3 == -3.0
. .
الرياضيات في إصدار Python 3.0
في إصدار (Python 3.0)، تم تغيير عامل القسمة الصحيحة (/) ليصبح دائمًا تقسيم باستخدام الفاصلة العائمة، على سبيل المثال: 5/2 == 2.5.
في مصطلحات بايثون، المعامل (/) هي القسمة الحقيقية (أو ببساطة القسمة)، والمعامل (//) هي المستخدمة في القسمة السقفية. وكانت (/) هي معامل القسمة الكلاسيكية قبل الإصدار (Python 3.0).
التقريب نحو اللانهاية السلبية، على الرغم من اختلافها عن معظم اللغات، إلاّ أنه يُضيف الاتساق. على سبيل المثال، هذا يعني أن المعادلة:
(a + b)//b == a//b + 1
صحيحة دائمًا.
وهذا يعني أيضًا أن المعادلة:
b*(a//b) + a%b == a
صالحة لكل من القيم الموجبة والسالبة ل (a). ومع ذلك، فإن الحفاظ على صحة هذه المعادلة يعني أنه في حين أن نتيجة ٪ b هي، كما هو متوقع، في الأقواس نصف المفتوحة [0، b)، حيث b هو عدد صحيح موجب، يجب أن تقع في الفاصل (b، 0] عندما تكون b سالبة.
الدالة الدائرية
توفر بايثون دالة دائرية لتقريب التعويم إلى أقرب عدد صحيح. لكسر التعادل، يستخدم إصدار (Python 3) تقريبًا حتى: الدائرة (1.5) والدائرة (2.5) كلاهما ينتج 2. أما إصدارات بايثون قبل الإصدار (Python 3) المستخدمة في التقريب إلى الصفر: الدائرة (0.5) هي 1.0، والدائرة (-0.5) هي −1.0.
تسمح لغة بايثون بالتعبيرات المنطقية ذات علاقات المساواة المتعددة بطريقة تتوافق مع الاستخدام العام في الرياضيات.
على سبيل المثال، التعبير:
a < b < c
يختبر ما إذا كان a أقل من b وb أقل من c.
وتُفسر اللغات المشتقة هذا التعبير بشكل مختلف، مثلا، في لغة C:
يقوم التعبير أولا بتقييم a < b، مما يؤدي إلى 0 أو 1، ثم تتم مقارنة هذه النتيجة مع c.
الحساب التعسفي
تستخدم بايثون حسابًا تعسفيًا من حيث الدقة في جميع العمليات الصحيحة.
يوفر النوع (/) الفئة العشرية في الوحدة العشرية أرقام النقطة العشرية إلى دقة اعتباطية محددة مسبقًا والعديد من أوضاع التقريب.
توفر فئة الكسر في وحدة الكسور الدقة التعسفية للأرقام العقلانية.
نظرًا لمكتبة لغة برمجة بايثون الواسعة للرياضيات، ومكتبة الطرف الثالث (NumPy) التي توسّع القدرات المحلية بشكل أكبر، يتم استخدامها كثيرًا كلغة نصيّة علمية للمساعدة في مشاكل مثل معالجة البيانات العددية والتلاعب.
أمثلة برامج مكتوبة بلغة بايثون
1. برنامج الترحيب
Hello world program:
print('Hello, world!')
2. برنامج حساب مضروب عدد صحيح
Program to calculate the factorial of a positive integer:
n = int(input('Type a number, then its factorial will be printed:'))
if n < 0:
raise ValueError('You must enter a positive number')
fact = 1
i = 2
while i <= n:
fact = fact * i
i = i + 1
print(fact)
مكتبات لغة بايثون
توفر مكتبة لغة بايثون القياسية الكبيرة، والتي يُشار إليها عادةً بأنها واحدة من أعظم نقاط قوتها، أدوات مناسبة للعديد من المهام. بالنسبة للتطبيقات التي تتعامل مع شبكة الإنترنت، يتم دعم العديد من التنسيقات والبروتوكولات القياسية مثل (MIME) و(HTTP). وهي تتضمن وحدات لإنشاء واجهات مستخدم رسومية، والاتصال بقواعد البيانات العلائقية، وتوليد أرقام عشوائية زائفة، وحسابات باستخدام الدقة التعسفية العشرية، والتلاعب بالتعبيرات العادية، واختبار الوحدات النمطية.
يتم تغطية بعض أجزاء المكتبة القياسية بالمواصفات (على سبيل المثال، تطبيق (Wsgiref) لواجهة بوابة خادم الويب (WSGI) يتبع PEP 333 102)، ولكن معظم الوحدات النمطية ليست كذلك. يتم تحديدها من خلال التعليمات البرمجية والوثائق الداخلية وأجنحة الاختبار. ومع ذلك، نظرًا لأن معظم المكتبة القياسية هي كود بايثون عبر الأنظمة الأساسية، فإن عددًا قليلا فقط من الوحدات يحتاج إلى تعديل أو إعادة كتابة لعمليات التنفيذ المختلفة.
اعتبارًا من شهر نوفمبر 2019، يحتوي مؤشر بايثون (Python Package PyPI)، وهو المستودع الرسمي لبرامج بايثون التابعة لجهات خارجية، على أكثر من 200,000 مجموعة متنوعة من الوظائف، بما في ذلك:
الوظائف المتوفرة في لغة بايثون
واجهات المستخدم الرسومية | Graphical user interfaces |
أطر الويب | Web frameworks |
الوسائط المتعددة | Multimedia |
قواعد بيانات | Databases |
التواصل | Networking |
أطر الاختبار | Test frameworks |
التشغيل الآلي | Automation |
كشط الويب | Web scraping |
توثيق | Documentation |
إدارة النظام | System administration |
الحوسبة العلمية | Scientific computing |
معالجة النص | Text processing |
معالجة الصورة | Image processing |
التعلم الآلي | Machine learning |
تحليلات البيانات | Data analytics |
بيئات تطوير البرامج
تتضمن معظم تطبيقات لغة بايثون، بما في ذلك مترجم بايثون (CPython)، حلقة قراءة، تقييم، طباعة (REPL)، مما يسمح لها بالعمل كمترجم لسطر الأوامر حيث يقوم المستخدم بإدخال البيانات بشكل تسلسلي ويتلقى النتائج على الفور.
تُضيف الهياكل الأخرى، بما في ذلك (IDLE) و(IPython)، المزيد من القدرات مثل الإكمال التلقائي المُحسّن والاحتفاظ بحالة الجلسة وإبراز البنية.
بالإضافة إلى بيئات التطوير المتكاملة القياسية لسطح المكتب، هناك بيئات (IDEs) مستندة إلى مستعرض الويب. وبيئة (SageMath) المخصصة لتطوير برامج بايثون المتعلقة بالعلوم والرياضيات، وبيئة (PythonAnywhere)، وهي بيئة تطوير واستضافة تستند إلى المستعرض، وبيئة (Canopy IDE)، وهي بيئة بايثون المخصصة للبرامج التجارية وتركز على الحوسبة والنظم المحاسبية العلمية.
ترجمة أو تنفيذ البرامج
فيما يلي طرق المتاحة لترجمة أو تنفيذ البرامج المكتوبة بلغة بايثون:
برنامج التنفيذ أو الترجمة الأساسي
المترجم (بالإنجليزية: Compiler) الخاص بلغة بايثون هو (CPython)، وهو البرنامج المسئول عن الترجمة والتنفيذ المرجعي أو الأساسي للغة بايثون. وهو مكتوب بلغة (C)، يلبي معيار (C89) مع العديد من ميزات (C99) المحددة. وهو يقوم بتجميع برامج بايثون (Python) في كود بايت (Code Byte) متوسط يتم تنفيذه بعد ذلك بواسطة جهازها الافتراضي. يتم توزيع (CPython) مع مكتبة قياسية كبيرة مكتوبة باستخدام مزيج من لغة برمجة (C) ولغة بايثون الأصلية. وهي متاحة للعديد من الأنظمة الأساسية، بما في ذلك نظام ويندوز (Windows) ومعظم الأنظمة الحديثة الشبيهة بنظام يونكس (Unix). وقد كانت إمكانية نقل النظام الأساسي من أولى أولويات بايثون.
برامج ترجمة أخرى
المترجم (PyPy) هو مترجم سريع ومتوافق مع إصدار (Python 2.7) وإصدار (Python 3.6). يقدم الترجمة في وقت مناسب وحقق تحسنًا كبيرًا في السرعة مقارنة بمترجم (CPython)، ولكن لا يمكن استخدام العديد من المكتبات المكتوبة بلغة (C) معه.
(Stackless Python) هو جزء مهم من المترجم (CPython) والذي ينفّذ الحلقات الدقيقة أو (بالإنجليزية: Microthreads). لا يُستخدم موارد الذاكرة (C)، مما يسمح للبرامج المتزامنة على نطاق واسع. لدى (PyPy) أيضًا نسخة (Stackless).
(MicroPython) و(CircuitPython) هما من إصدار (Python 3.0) المحسّنة للتحكم الدقيق. وهذا يشمل (Lego Mindstorms EV3).
برامج الترجمة أو التنفيذ غير المدعومة
تم تطوير برامج ترجمة بايثون أخرى في أوقات معينة، ولكنها الآن غير مدعومة:
- بدأت (Google) مشروعًا باسم (Unladen Swallow) في عام 2009، بهدف تسريع مترجم بايثون خمسة أضعاف باستخدام (LLVM)، وتحسين قدرته على مؤشرات الترابط لتوسيع نطاق آلاف النوى، في حين تُعاني عمليات التنفيذ العادية من قفل المترجم العالمي.
- كان (Psyco) مترجمًا متخصصًا في وقت ما يتكامل مع (CPython) ويحول الرمز الثانوي إلى رمز الجهاز في وقت التشغيل. الرمز المنبعث مخصص لأنواع معينة من البيانات وهو أسرع من شفرة بايثون القياسية.
في عام 2005، أصدرت نوكيا مترجم بايثون للهواتف المحمولة (Series 60) المسمى (PyS60).
يتضمن العديد من الوحدات من تطبيقات (CPython) وبعض الوحدات الإضافية للتكامل مع نظام التشغيل (Symbian).
تم تحديث المشروع ليتم تشغيله على جميع متغيرات منصة (S60)، وتتوفر العديد من وحدات الجهات الخارجية.
يدعم (Nokia N900) أيضًا بايثون مع مكتبات عناصر واجهة مستخدم (GTK)، مما يتيح كتابة البرامج وتشغيلها على الجهاز المستهدف.
برامج الترجمة إلى لغات برمجة أخرى
هناك العديد من برامج الترجمة إلى لغات الكائنات عالية المستوى، إما مع بايثون غير المقيد، أو مجموعة فرعية مقيدة من بايثون، أو لغة مشابهة للغة بايثون كلغة المصدر:
يتيح برنامج (Jython) استخدام مكتبة فئة (Java) من برنامج بايثون.
يتبع (IronPython) نهجًا مشابهًا لتشغيل برامج بايثون على دوت نت (.NET Common Language Runtime).
يمكن ترجمة لغة (RPython) إلى لغة (C)، ويتم استخدامها لبناء مترجم (PyPy) من Python.
يقوم (Pyjs) بتجميع بايثون على (JavaScript).
يقوم (Cython) بتجميع بايثون إلى (C) و(C++).
يستخدم نومبا (LLVM) لترجمة بايثون إلى كود الآلة.
يقوم (Pythran) بتجميع بايثون إلى (C++).
(Pyrex) و(Shed Skin) يتم تجميعهما إلى (C) و(C++) على التوالي.
يقوم (Google Grumpy) بتجميع (Python to Go).
يقوم (MyHDL) بتجميع بايثون على (VHDL).
تقوم (Nuitka) بتجميع بايثون إلى (C++).
تطوير لغة بايثون
يتم تطوير لغة برمجة بايثون إلى حد كبير من خلال آلية تقديم اقتراحات التحسين المتميزة (Python PEP)، وهي الآلية الأساسية لاقتراح ميزات جديدة رئيسية في لغة بايثون وجمع المدخلات وتوثيق قرارات تصميم بايثون. يتم تغطية نمط ترميز لغة بايثون في (PEP 8).
ويراجع مجتمع بايثون والمجلس التوجيهي مقترحات تحسين بايثون المتميزة ويعلقون عليها.
يتوافق تعزيز اللغة مع تطوير المترجم الأساسي (CPython).
والقائمة البريدية (Python-Dev) هي المنتدى الأساسي لتطوير لغة بايثون.
تمت مناقشة قضايا محددة في أداة تتبع الأخطاء (Roundup) المستضافة على (bugs.python.org).
كما تم التطوير في الأصل على مستودع شفرة المصدر ذاتية الاستضافة (Mercurial)، حتى انتقلت بايثون إلى (GitHub) في يناير 2017.
تأتي إصدارات (CPython) العامة في ثلاثة أنواع، وتزداد الميزات في كل مرة يزدادا فيها رقم الإصدار.
وفيما يلي وصفًا موجزًا لأنواع إصدارات لغة بايثون الثلاثة:
1. عند زيادة الجزء الأول من رقم الإصدار
تحدث هذه الإصدارات بشكل غير متكرر، على سبيل المثال، تم إصدار (Python 3.0) بعد 8 سنوات من إصدار (Python 2.0).
الإصدارات الرئيسية أو “المميزة”، تصدر كل 18 شهرًا تقريبًا، متوافقة إلى حد كبير ولكنها تقدم ميزات جديدة.
2. عند زيادة الجزء الثاني من رقم الإصدار
كل نسخة رئيسية مدعومة بإصلاحات أخطاء لعدة سنوات بعد إصدارها.
تحدث إصدارات (Bugfix)، التي لا تقدم ميزات جديدة، كل ثلاثة أشهر تقريبًا ويتم إجراؤها عند إصلاح عدد كاف من الأخطاء في المنبع منذ الإصدار الأخير.
يتم أيضًا تصحيح الثغرات الأمنية في هذه الإصدارات.
3. عند زيادة الجزء الثالث والأخير من رقم الإصدار
تم الإعلان عن إصدار (Python 3.9 alpha1) في نوفمبر 2019، وباعتماد إيقاع إصدار سنوي جديد، فإنه من المتوقع أن يتم إصدار الإصدار الأول من (Python 3.9) في نوفمبر 2020.
يتم أيضًا إصدار العديد من الإصدارات التجريبية ألفا وبيتا ومرشحي الإصدار كمعاينات واختبار قبل الإصدارات النهائية.
وعلى الرغم من وجود جدول تقريبي لكل إصدار، إلا أنه غالبًا ما يتأخر إذا لم تكن الشفرة النهائية جاهزة.
ويُراقب فريق التطوير في بايثون حالة الشفرة عن طريق تشغيل مجموعة اختبار الوحدة الكبيرة أثناء التطوير، واستخدام نظام (BuildBot) للتكامل المستمر.
المؤتمر الأكاديمي الرئيسي حول لغة برمجة بايثون هو (PyCon).
هناك أيضًا برامج توجيه خاصة للغة بايثون مثل (Pyladies).
مولدات وثائق API
تتضمن مولدات وثائق (API) في لغة برمجة بايثون ما يلي:
- Sphinx
- Epydoc
- HeaderDoc
- Pydoc
استخدامات لغة بايثون
منذ عام 2003، صُنفت لغة برمجة بايثون باستمرار ضمن أفضل عشر لغات برمجة شعبية في مؤشر مجتمع البرمجة (TIOBE)، واعتبارًا من شهر فبراير 2020، صُنفت باعتبارها ثالث أكثر لغات البرمجة شعبية بعد لغة (Java) ولغة (C).
تم اختيار لغة بايثون كلغة برمجة العام في عام 2007 وعام 2010 وعام 2018.
وجدت دراسة تجريبية أن لغات البرمجة النصية، مثل لغة بايثون، هي لغات أكثر إنتاجية من اللغات التقليدية، مثل لغات (C) و(Java)، لمشكلات البرمجة التي تتضمن التلاعب بالسلسلة والبحث في القاموس، وخلصت إلى أن استهلاك الذاكرة غالبًا أفضل من لغة (Java) وليس أسوأ بكثير من لغة C أو C++.
المؤسسات الكبيرة التي تستخدم لغة بايثون
المؤسسات الكبيرة التي تستخدم لغة برمجة بايثون تشتمل على كل من:
- Wikipedia
- Yahoo
- CERN
- NASA
- Amazon
- Spotify
- وبعض الكيانات الصغيرة مثل:
- ILM
- ITA
يمكن أن تستخدم بايثون كلغة نصّية لتطبيقات الويب.
على سبيل المثال، عبر (mod_wsgi) لخادم الويب (Apache).
مع واجهة بوابة خادم الويب، تطورت واجهة برمجة تطبيقات قياسية لتسهيل هذه التطبيقات.
تدعم أطر الويب مثل (Django) و(Pylons) و(Pyramid) و(TurboGears) و(web2py) و(Tornado) و(Flask) و(Bottle) و(Zope) المطورين في تصميم التطبيقات المعقدة وصيانتها.
ويمكن استخدام (Pyjs) و(IronPython) لتطوير جانب العميل من التطبيقات القائمة على Ajax.
ويمكن استخدام (SQLAlchemy) كمحدد بيانات لقاعدة بيانات علائقية.
يُعد (Twisted) إطار عمل لبرمجة الاتصالات بين أجهزة الكمبيوتر، ويتم استخدامه (على سبيل المثال) بواسطة (Dropbox).
تسمح المكتبات مثل (NumPy) و(SciPy) و(Matplotlib) بالاستخدام الفعًال لبايثون في الحوسبة العلمية.
المكتبات المتخصصة مثل (Biopython) و(Astropy) توفر وظائف خاصة بمجال التكنولوجيا الحيوية والمعلوماتية الحيوية.
(SageMath) هو برنامج رياضي مزود بواجهة كمبيوتر محمول قابلة للبرمجة في بايثون: تغطي مكتبته العديد من جوانب الرياضيات، بما في ذلك الجبر والتركيبات التعداداية والرياضيات العددية ونظرية الأعداد وحساب التفاضل والتكامل.
دمج لغة بايثون في منتجات أخرى
تم دمج لغة بايثون بنجاح في العديد من منتجات البرامج كلغة برمجة نصية، بما في ذلك برامج طريقة العناصر المحدودة مثل (Abaqus)، مصمم النماذج البارامترية ثلاثية الأبعاد مثل (FreeCAD)، حزم الرسوم المتحركة ثلاثية الأبعاد مثل (3D Max ،Blender ،Cinema 4D ،Lightwave ،Houdini ،Maya modo ،MotionBuilder ،Softimage)، مؤلف المؤثرات البصرية (Nuke)، وبرامج تصوير ثنائية الأبعاد مثل (GIMP Inkscape ،Scribus and Paint Shop Pro)، وبرامج تدوين الموسيقى مثل مسجل الأهداف وكابيلا. يستخدم مصحح (GNU Python) كطابعة جميلة لإظهار الهياكل المعقدة مثل حاويات (C++). تروّج (Esri) لبايثون كأفضل خيار لكتابة البرامج النصية في (ArcGIS). كما تم استخدامها في العديد من ألعاب الفيديو، وتم اعتمادها كأول لغة برمجة متوفرة في محرك تطبيق جوجل واللغات الأخرى هي لغة Java ولغة Go.
استخدام لغة بايثون في الذكاء الاصطناعي
تُستخدم لغة برمجة بايثون بشكل شائع في مشاريع الذكاء الاصطناعي بمساعدة مكتبات مثل (TensorFlow) و(Keras) و(Pytorch) و(Scikit-learn).
وكلغة برمجة نصية ذات بنية معيارية وبنية بسيطة وأدوات معالجة نصية غنية، غالبًا ما تُستخدم بايثون لمعالجة اللغة الطبيعية.
تتضمن العديد من أنظمة التشغيل بايثون Python كمكوًن قياسي فيها.
وتأتي لغة بايثون مع معظم توزيعات (Linux) و(AmigaOS 4) و(FreeBSD) كحزمة، و(NetBSD) و(OpenBSD) كحزمة، و(macOS) ويمكن استخدامها من سطر الأوامر (الطرفية). تستخدم العديد من توزيعات (Linux) المثبتات المكتوبة بلغة بايثون: يستخدم (Ubuntu) مثبت (Ubiquity)، بينما يستخدم (Red Hat Linux) و(Fedora) مثبت (Anaconda). تستخدم (Gentoo Linux) بايثون في نظام إدارة الحزم (Portage).
يتم استخدام لغة بايثون على نطاق واسع في صناعة أمن المعلومات، بما في ذلك في التطوير والاستغلال.
معظم برامج وتطبيقات (Sugar) التعليمية للأطفال التي تم تطويرها في مختبراتها، مكتوبة بلغة بايثون. اعتمد مشروع (Raspberry Pi) للكمبيوتر الفردي لغة بايثون كلغة برمجة رئيسية للمستخدم.
نظرًا للبروتوكولات السهلة الاستخدام في Python وكونها لغة سهلة الفهم، يتم استخدامها بشكل شائع كلغة تمهيدية مع الطلاب في كليات علوم الحاسب وتخصصات علوم الحوسبة. وهذا يسمح للطلاب بتعلم نظريات ومفاهيم الحوسبة بسهولة ثم تطبيقها على لغات البرمجة الأخرى الأكثر تعقيدًا.
يشمل (LibreOffice) بايثون، ويعتزم استبدال لغة جافا (Java) بلغة بايثون.
ويُعد موفّر البرمجة النصية بايثون ميزة أساسية منذ الإصدار (Python 4.00) من تاريخ 7 فبراير 2013.
لغات البرمجة المتأثرة بلغة بايثون
أثر تصميم وفلسفة لغة برمجة بايثون على العديد من لغات البرمجة الأخرى، ويمكن إيجاز ذلك بما يلي:
لغة برمجة Boo
تستخدم لغة برمجة (Boo) المسافة الفارغة وبناء الجملة البرمجية مشابه لبناء جمل بايثون، وكذلك نموذج الكائن.
لغة كوبرا Cobra
تستخدم لغة كوبرا (Cobra) المسافة الفارغة وبناء الجملة المماثل للغة بايثون، وتسرد وثيقة “شكر وتقدير” موجهة إلى لغة بايثون أولا بين اللغات التي أثرت عليها. ومع ذلك، تدعم كوبرا مباشرة التصميم بالعقود واختبارات الوحدة والكتابة الثابتة الاختيارية.
لغة CoffeeScript
ولغة (CoffeeScript)، وهي لغة برمجة تتقاطع مع لغة (JavaScript)، لديها بنية مستوحاة من بايثون.
لغة ECMAScript
استعارت لغة (ECMAScript) التكرارات والمولدات (Generators) من بايثون.
لغة برمجة Go
تم تصميم لغة برمجة Go من أجل “سرعة العمل بلغة ديناميكية مثل بايثون” وتشارك نفس البنية المستخدمة في تجزئة المصفوفات.
لغة Groovy
كان الدافع وراء إنشاء لغة (Groovy) هو الرغبة في جلب فلسفة تصميم لفة بايثون إلى (Java).
لغة جوليا Julia
تم تصميم لغة جوليا (Julia) “باستخدام وحدات ماكرو حقيقية لتكون قابلة للاستخدام في البرمجة العامة مثل بايثون ويجب أن تكون بنفس سرعة C”. يمكن الاتصال من أو إلى جوليا، إلى (PyCall.jl) وحزمة بايثون (Pyjulia) تسمح بالاتصال، في الاتجاه الآخر، من بايثون.
لغة برمجة Kotlin
(Kotlin) هي لغة برمجة وظيفية ذات غلاف تفاعلي مشابه لبايثون. ومع ذلك، يتم كتابة (Kotlin) بشكل ثابت مع إمكانية الوصول إلى مكتبات (Java) القياسية.
لغة Nim
تستخدم لغة (Nim) المسافة الفارغة وصيغة مشابهة لصيغ بايثون، ومع ذلك فهي مكتوبة بشكل ثابت، وتقدم وحدات ماكرو قوية.
لغة روبي Ruby
قال مبتكر لغة برمجة روبي (Ruby)، يوكيهيرو ماتسوموتو،: “أردت لغة نصيّة أقوى من لغة بيرل، وموجهة نحو الأشياء أكثر من بايثون، ولهذا السبب قررت تصميم لغتي الخاصة”.
لغة برمجة سويفت Swift
ولغة برمجة سويفت (Swift)، وهي لغة برمجة طورتها شركة آبل (Apple)، لديها بعض القواعد المستوحاة من لغة بايثون.
لغة برمجة GDScript
لغة برمجة (GDScript)، هي لغة برمجة مكتوبة ديناميكيًا تُستخدم لإنشاء ألعاب الفيديو. وهي تشبه إلى حد بعيد لغة بايثون مع بعض الاختلافات الطفيفة.
لغات برمجة أخرى
كما تم محاكاة ممارسات تطوير بايثون بلغات أخرى. على سبيل المثال، تم استخدام ممارسة طلب مستند يصف الأساس المنطقي، والقضايا المحيطة بتغيير اللغة (في بايثون PEP) في (Tcl) و(Erlang).
تعلم لغة بايثون
توجد العديد من المنصات الإلكترونية التي توفر دورات التدريب المتخصصة في البرمجة بشكل عام والبرمجة بلغة Python بشكل خاص، وفي موقع مركز البحوث والدراسات متعدد التخصصات، تم إطلاق قسم المراجع التعليمية والذي يقدم مجموعة متنوعة من برامج التعليم والتدريب المتخصصة في مختلف المجالات، ومنها تعليم لغة Python.
للانتقال مباشرة إلى قسم المراجع التعليمية – دروس لغة Python: يمكن الضغط على الرابط التالي: دروس لغة Python
لقراءة المزيد حول لغات البرمجة بشكل عام، يمكن قراءة موضوع: لغات البرمجة – تعريفها وأنواعها ومستوياتها وخصائصها
موسوعة علوم الكمبيوتر – مركز البحوث والدراسات متعدد التخصصات
المصادر
- Python for Artificial Intelligence, Wiki.python.org. 19 July 2012. Archived from the original on 1 November 2012. Retrieved 3 December 2012.
- Paine, Jocelyn, ed. (August 2005). “AI in Python”. AI Expert Newsletter. Amzi!. Retrieved 11 February 2012.
- PyAIML 0.8.5 : Python Package Index Pypi.python.org. Retrieved 17 July 2013.
- Russell, Stuart J. & Norvig, Peter (2009). Artificial Intelligence: A Modern Approach (3rd ed.). Upper Saddle River, NJ: Prentice Hall. ISBN 978-0-13-604259-4.
- أساسيات لغة برمجة بايثون، ترجمة وإعداد: د.م. مصطفى عبيد، مركز البحوث والدراسات متعدد التخصصات، 2020م.