اذا لم تجد ما تبحث عنه يمكنك استخدام كلمات أكثر دقة.
بايثون (بالإنجليزية: Python) هي لغة برمجة، عالية المستوى سهلة التعلم مفتوحة المصدر قابلة للتوسيع، تعتمد أسلوب البرمجة الكائنية (OOP). لغة بايثون هي لغة مُفسَّرة، ومُتعدِدة الاستخدامات، وتستخدم بشكل واسع في العديد من المجالات، كبناء البرامج المستقلة باستخدام الواجهات الرسومية وفي تطبيقات الويب، ويمكن استخدامها كلغة برمجة نصية للتحكم في أداء العديد من البرمجيات مثل بلندر. بشكل عام، يمكن استخدام بايثون لعمل البرامج البسيطة للمبتدئين، ولإنجاز المشاريع الضخمة في الوقت نفسه. غالباً ما يُنصح المبتدؤون في ميدان البرمجة بتعلم هذه اللغة لأنها من بين أسرع اللغات البرمجية تعلماً.
طُوِّرت بايثون في معهد الرياضيات والمعلوماتية الهولندي (CWI) في مدينة أمستردام على يد جايدو فان روسم في أواخر ثمانينات القرن العشرين، وكان أول إعلان عنها في عام 1991م. كُتبت نواة اللغة باستعمال لغة سي. أطلق روسم الاسم "بايثون" على لغته تعبيرًا عن إعجابه بفِرقَة مسرحية هزلية شهيرة من بريطانيا، كانت تطلق على نفسها اسم مونتي بايثون.
تتميز بايثون بمجتمعها النشط، كما أن لها الكثير من المكتبات البرمجية ذات الأغراض الخاصة التي برمجها أشخاص من ذلك مجتمع. مثلاً، هناك مكتبة باي جايم التي توفر مجموعة من الدوال من أجل برمجة الألعاب. يمكن لبايثون أيضاً التعامل مع العديد من أنواع قواعد البيانات مثل ماي إس كيو إل وغير ذلك.
تدعم بايثون أنماط برمجية متعددة هي التوجيه الكائني، البرمجية جانبية التوجيه والبرمجة الوظيفية. تُستخدم بايثون عادةً مثل العديد من لغات البرمجة الديناميكية كلغة برمجة نصية. بايثون لديها نموذج مفتوح للتطوير، قائم على مجتمع بايثون البرمجي ومدعوم من مؤسسة برمجيات بايثون. والتي تحافظ على تعريف اللغة في التنفيذ المرجعي لسي بايثون.
اشتق اسم بايثون من الفرقة الكوميدية البريطانية مونتي بايثون نتيجة لتأثر فان روسم بمشاهدة عروضها أثناء عمله على تطوير اللغة. تظهر مونتي بايثون من حين لآخر في شيفرة بايثون البرمجية وثقافتها. على سبيل المثال، السبام والبيض هي المتغيرات ماوراء البنية الأكثر شيوعاً في أدب لغة بايثون عوض متغير فو وبار التقليدي. يلاحظ أيضًا أن وثائق بايثون الرسمية تحيل إلى المشاهد القصيرة التي قدمتها فرقة مونتي بايثون.
تستخدم البادئة باي- (بالإنجليزية: Py-) للإشارة إلى أي شيء مُتعلِّق بهذه اللغة. على سبيل المثال، تنفيذات بايثون ومكتباتها مثل باي جايم ربط برمجي لإس دي ال ببايثون، باي كيوت وباي جتك اللذان يربطان كلاً من كيوت وجتك ببايثون.
بدأ التفكير في إنشاء لغة بايثون أواخر الثمانينيات من القرن العشرين من طرف جايدو فان روسم في معهد الرياضيات والمعلوماتية بهولندا كخليفة للغة البرمجية اي بي سي (والتي بدورها مستوحاة من سيتل). وأرادوا منها بأن تكون قادرة على معالجة الحالات الاستثنائية والتفاعل مع نظام التشغيل أميبا. بالمقابل، لم يبدأ تنفيذ الفكرة حتى ديسمبر 1989.
تحمّل فان روسم مسؤولية إدارة المشروع منفردًا، وذلك بصفته المطور الرئيسي، حتى 12 يوليو 2018، عندما أعلن عن "إجازته الدائمة" من مسؤولياته كدكتاتور بايثون الخيري لمدى الحياة، وهو اللقب الذي منحه له مجتمع بايثون ليعكس التزامه طويل الأمد بصفته صانع القرار الرئيسي للمشروع. وهو يشارك الآن في القيادة عضوًا في مجلس التوجيه المكون من خمسة أشخاص.
أُصدرت النسخة الثانية من يايثون (بايثون 2.0) في 16 أكتوبر 2000 مع العديد من الميزات الجديدة الرئيسية، بما في ذلك تحديد دوري (حلقي) وجامع القمامة ودعم يونيكود.
أُصدرت النسخة الثالثة من بايثون (بايثون 3.0) في 3 ديسمبر 2008.وكانت مراجعة رئيسية للغة لكنها ليست متوافقة بالكامل مع الإصدارات السابقة. من ميزاتها الرئيسية : الحمل العكسي في سلاسل إصدار بايثون 2.6.x و2.7.x. تتضمن إصدارات بايثون 3 وظيفة 2to3
، التي تعمل تلقائيًا (جزئيًا على الأقل) على ترجمة كود (التعليمات البرمجية) بايثون 2 إلى بايثون 3.
حددت نهاية صلاحية بايثون 2.7 في البداية عام 2015 ثم أُجل إلى عام 2020 خشية عدم إمكانية نقل مجموعة كبيرة من التعليمات البرمجية الموجودة بسهولة إلى بايثون 3.
في يناير 2019، انتخبت نواة بايثون النشطة من المطورين بريت كانون، نيك كوغلان، باري وارسو، كارول فايلينغ وفان روسم لتشكيل الأعضاء الخمسة "للمجلس التوجيهي" لقيادة المشروع.
تعد بايثون لغة برمجية سهلة نسبيا بالمقارنة مع جافا وسي++ إضافة إلى أنها لغة برمجة متعددة الأنماط الفكرية (برمجة متعددة البرادايم). تدعم البرمجة كائنية التوجه والبرمجة المهيكلة بشكل كامل، كما تدعم بايثون البرمجة الوظيفية والبرمجة جانبية المنحى (بما في ذلك عن طريق البرمجة الوصفية والكائنات الوصفية "خاصةً الطرق"). يمكنها أيضًا دعم العديد من الأنماط الفكرية الأخرى عن طريق الامتدادات، بما في ذلك التصميم بالعقود والبرمجة المنطقية.
زيادة على ذلك، فتصميم بايثون يقدم بعض الدعم للبرمجة الوظيفية في تقاليد ليسب. فلدى بايثون وظائف (دوال) filter
، reduce
، map
. كما تتوفر على اشتمال القائمة والقواميس والمجموعات وتعبيرات المولد. تحتوي المكتبة القياسية على وحدتين (itertools وfunctools) التي تنفذ أدوات وظيفية مستعارة من هاسكل وإم أل المعيارية.
تعتبر بايثون لغة سهلة للغاية لتبدأ بها في تعلم البرمجة. بايثون تحتوي تراكيب سهلة بشكل غير معتاد، كما سبق ذكره. فبايثون تسعى جاهدة إلى بناء قواعد نحوية أبسط وأقل تشويشًا مع منح المطورين خيارًا في منهجية البرمجة الخاصة بهم. على النقيض من شعار بيرل «هناك أكثر من طريقة للقيام بذلك»، فإن بايثون تتخذ الشعار «يجب -ويفضل- أن تكون هناك طريقة واحدة واضحة للقيام بذلك» فلسفةً للتصميم. كتب أليكس مارتيلي، وهو زميل في مؤسسة بايثون للبرمجيات ومؤلف كتاب "بايثون"، أن «وصف شيء ما بأنه "ذكي" لا يعتبر مجاملة في ثقافة بايثون».
بايثون هي مثال على البرمجيات الحرة مفتوحة المصدر. بعبارات بسيطة، يمكنك بحرية توزيع نسخ من هذه البرمجيات، وقراءة الشيفرة (الكود) المصدرية، والقيام ببعض التغييرات عليها واستخدام أجزاء منها في برمجيات حرة جديدة، فالبرمجيات الحرة تقوم على مبدأ المجتمع الذي يتشارك في المعرفة.
عندما تكتب البرامج في بايثون، لا داعي للاهتمام بالتفاصيل دقيقة المستوى مثل إدارة الذاكرة التي يستخدمها برنامجك فبايثون تستخدم نظام أنواع (برمجي) ديناميكي ومزيجًا من التحديد الحلقي ومجمع القمامة والمحدد الحلقي (الدوري) لإدارة الذاكرة. كما تتميز أيضًا بتحليل الاسم الديناميكي (الربط المتأخر)، والذي يربط الطريقة وأسماء المتغيرات أثناء تنفيذ البرنامج.
نظرا لطبيعتها البرمجية مفتوحة المصدر، فهي تعمل في العديد من المنصات. كل ما يكتب من برامج بايثون يمكن أن يعمل على أي من هذه المنصات دون أن يتطلب ذلك أي تغييرات على الإطلاق إذا كانت دقيقة بما فيه الكفاية لتجنب أي خصائص تعتمد على نظام بعينه.
يمكن استخدام بايثون على لينكس، ويندوز، فري بي إس دي، ماكينتوش، سولاريس، أو إس/2، أندرويد. والعديد من أنظمة التشغيل الأخرى.
تدعم بايثون البرمجة الإجرائية وكذلك البرمجة الكائنية. في اللغات إجرائية التوجه، يتمحور البرنامج حول الإجراءات أو الدوال التي ليست سوى قطع من البرامج يمكن إعادة استخدامها. وفي اللغات كائنية التوجه، يتمحور البرنامج حول الكائنات التي تجمع بين البيانات والوظائف (الطرق). وبايثون لغة قوية جدا وأيضًَا تبسيطية للقيام بالبرمجة الكائنية خاصة عند مقارنتها بلغات مثل سي++ أو جافا.
بدلاً من دمج جميع وظائفها (طرقها) في نواتها، صممت بايثون لتكون قابلة للامتداد بدرجة كبيرة. هذه الوحدة النمطية المدمجة جعلتها شائعة بشكل خاص كوسيلة لإضافة واجهات قابلة للبرمجة إلى التطبيقات الحالية. تنبأت رؤية فان روسم للغة أساسية صغيرة مع مكتبة قياسية كبيرة ومترجمة (مجمّعة) قابلة للتوسيع بسهولة مستفيدة من أخطاء آي بي سي، التي تبنت النهج المعاكس.
لخصت فلسفة اللغة الأساسية في وثيقة زن بايثون (بيب 20)، والتي تتضمن حِكم مثل:
يسعى مطورو بايثون جاهدين لتجنب التحسين السابق لأوانه، ويرفضون التصحيحات للأجزاء غير الحرجة من تطبيق (تنفيذ) سي بايثون المرجعي الذي من شأنه أن يوفر زيادات هامشية في السرعة على حساب الوضوح. فعندما تكون السرعة مهمة، يمكن لمبرمج بايثون نقل الوظائف (الدوال) الحساسة زمنياً إلى نماذج التمديد المكتوبة بلغات مثل سي، أو باستخدام باي باي، وهو مترجم (مجمّع) آنيّ. سييثون متاح أيضًا، والذي يترجم نص بايثون لنص بلغة سي ويقوم بإجراء استدعاءات واجهة برمجة التطبيقات (API) مباشرة على مستوى اللغة سي إلى مفسر بايثون.
أحد الأهداف المهمة لمطوري بايثون هو الحفاظ على المتعة في الاستخدام. ينعكس هذا في اسم اللغة - تكريمًا لمجموعة بريطانية للكوميديا السيريالية مونتي بايثون - وفي المناهج المرحة أحيانًا للبرامج التعليمية والمواد المرجعية، مثل الأمثلة التي تشير إلى البريد العشوائي والبيض (من الألبوم المشهور لمونتي بايثون) والاستعاضة عن ذلك بفو بار القياسية.
صممت بايثون لتكون لغة ذات مقروئية عالية، تنسيقها مرتب بصرياً؛ فهي عادةً ما تستخدم كلمات إنجليزية شائعة الاستخدام في حين تستخدم لغات البرمجة الأخرى علامات الترقيم. على النقيض من العديد من اللغات الأخرى، لا تستخدم بايثون الأقواس المعقوفة { }
لتحديد كتل الكود، والفاصلة المنقوطة ;
بعد العبارات البرمجية اختيارية. لدى بايثون استثناءات نحوية وحالات خاصة أقل بكثير من لغة سي أو باسكال.
تستخدم بايثون الإزاحة بالفراغات بدلاً من الأقواس المعقوفة { }
أو الكلمات المفتاحية لتحديد كتل الكود. الزيادة في الإزاحة تأتي بعد بعض العبارات؛ إنقاص الإزاحة علامة على انتهاء الكتلة الحالية. وبالتالي، فإن البنية المرئية للبرنامج تمثل بدقة البنية الدلالية للبرنامج. تُسمى هذه الميزة أحيانًا قاعدة التسلل (بالإنجليزية: off-side rule)، والتي تشترك فيها بعض اللغات الأخرى، ولكن في معظم اللغات، لا تحتوي الإزاحة على أي معنى دلالي.
عبارات بايثون البرمجية تتضمن (من بين أمور أخرى):
=
) تعمل بشكل مختلف عن بقية لغات البرمجة الأمرية وهذه الآلية الأساسية (تتضمن طبيعة إصدارات بايثون الخاصة بالمتغيرات) والتي تنير الطريق للعديد من ميزات اللغة الأخرى. نأخذ مثالاً عن المساواة في لغة سي: x = 2
، يُترجم إلى "اسم المتغير المكتوب x يتلقى نسخة من القيمة العددية 2". تنسخ القيمة (اليمنى) في موقع تخزين مخصص بحيث يكون اسم المتغير (الأيسر) هو العنوان الرمزي. الذاكرة المخصصة للمتغير كبيرة بما يكفي (من المحتمل أن تكون كبيرة جدًا) للنوع المعلن. في أبسط حالة لإسناد بايثون (assignment)، وإذا قمنا بنفس العملية في بايثون (أي x = 2
)، فإنه يُترجم إلى "اسم (generic عام) x يستقبل مرجعًا إلى كائن منفصل مُخصص ديناميكيًا نوعه العددي (int عدد صحيح) قيمته 2". هذا يسمى ربط الاسم بالكائن (binding). نظرًا لأن موقع تخزين الاسم لا يحتوي على القيمة المشار إليها، فمن غير المناسب تسميته متغيرًا. قد يتم إعادة الأسماء لاحقًا في أي وقت إلى كائنات من أنواع مختلفة اختلافًا كبيرًا، بما في ذلك السلاسل النصية strings والإجراءات والكائنات المعقدة مع البيانات والطرق،... إلخ. التعيينات (مساواة) المتتالية لقيمة مشتركة لأسماء متعددة، على سبيل المثال، x = 2
؛ y = 2
؛ z = 2
ينتج عن تخصيص مساحة تخزين (على الأكثر) لثلاثة أسماء وكائن عددي واحد، يتم ربط جميع الأسماء الثلاثة به. نظرًا لأن الاسم هو حامل مرجع عام (generic reference holder)، فمن غير المعقول ربط نوع بيانات ثابت به. ومع ذلك، في وقت معين، سيتم ربط الاسم بكائن ما، والذي سيكون له نوع؛ وبالتالي هناك كتابة ديناميكية.if
، التي تنفذ كتلة الكود بشكل شرطي (أي لا ينجز إلا إدا توفر هذا الشرط)، الى جانب عبارة عدا ذلك else
وelif
اختصاراً لعبارة (عدا ذلك إذا else-if).for
، التي تتكرر فوق كائن قابل للتكرار بشكل حلقي، حيث تلتقط كل عنصر في متغير محلي لاستخدامه بواسطة الكتلة البرمجية المرفقة.while
، التي تنفذ الكتلة البرمجية للكود طالما الشرط محقق.try
، التي تسمح بالتعامل مع الاستثناءات المرفوعة في مجموعة الكود المرفق والتعامل معها باستثناء except
البنود؛ يضمن أيضًا تشغيل كود التنظيف في الكتلة البرمجية الأخيرة دائمًا بغض النظر عن كيفية خروج الكتلة.raise
تستخدم لرفع استثناء محدد أو إعادة رفع استثناء تم اكتشافه.class
، التي تقوم بتنفيذ كتلة من الكود وتربط مساحة الاسم المحلية الخاصة بها بصنف، لاستخدامها في البرمجة الموجهة للكائنات.def
، التي تُعرّف دالة أو طريقة.with
، من بايثون2.5 التي صدرت في سبتمبر 2006 ، والتي ترفق كتلة الكود داخل مدير السياق (على سبيل المثال، الحصول على قفل قبل تشغيل كتلة الكود وإطلاق القفل بعد ذلك، أو فتح ملف ثم إغلاقه)، والسماح لاكتساب الموارد الذي هو سلوك يشبه التهيئة (RAII) ويحل محل العبارة الإصطلاحية محاولة/أخيراً try/finally.break
تعني أخرج من الحلقة.continue
تتجاوز التكرارية الحالية وتتابع للعنصر التالي.pass
، والتي تعمل بمثابة لا عملية. تستعمل عندما هناك حاجة نحويًا لإنشاء كتلة كود فارغة.assert
، المستخدمة أثناء تصحيح الأخطاء للتحقق من الشروط التي يجب تطبيقها.yield
والتي تعيد قيمة من الدالة المولّدة. بدءاً من بايثون 2.5،yield
هي أيضاً عملية. هذا الشكل يستخدم عادةً لتنفيذ الروتينات المساعدة.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
في بايثون 3.بايثون لا تدعم التحسين الخاص الاستدعاء الذيلي أو (استمرارية الدرجة الأولى)، كما أعلن لغايدو فان روسم أنه لن تدعم أبداً. ومع ذلك، يتم توفير دعم أفضل للوظائف الشبيهة بالروتين المساعد في النسخة 2.5، من خلال توسيع مولدات بايثون. قبل نسخة 2.5، كانت المولدات مكررات كسولة، والتي يتم تمرير المعلومات من اتجاه واحد خارج المولد. ابتداءً من بايثون 2.5، صار من الممكن تمرير المعلومات مرة أخرى إلى دالة المولد، وبدءاً من بايثون 3.3، صار من الممكن أيضا تمرير المعلومات من خلال تعدد مستويات المكدس.
بعض تعبيرات بايثون تشبه لغات مثل سي وجافا، بينما البعض الآخر لا:
//
وتقسيم الفاصلة ا(لعائمة) /
. أضافت بايثون أيضًا العامل **
من أجل الأس.@
، لغرض استخدامه من قبل المكتبات مثل نمباي لضرب المصفوفات.:=
، الذي يطلق عليه "عامل الفظّ""walrus operator". يقوم بتعيين القيم للمتغيرات كجزء من تعبير أكبر.==
تقارن الأعداد من حيث القيمة (-0.0==0.0
هي true
)، بالمقابل في جافا تقارن عدديا بالقيمة أو الكائنات بالعنوان المرجعي. (من الممكن في جافا مقارنة القيمة بالكائنات عن طريق طريقة ()equals
). معامل بايثون is
يستخدم ليقارن هوية الكائنات (أي المقارنة بالعنوان المرجعي). في بايثون، المقارنات يمكن تقييدها، على سبيل المثالa <= b <= c
.and
, or
, not
للعمليات البوليانية بدل من الرموز &&
, ||
, !
المستخدمة في جافا ولغة سي.x if c else y
(يختلف عن بقية اللغات الأخرى في ترتيب المعاملات من المعامل الشائع c ? x : y
عن بقية اللغات المختلفة).[1, 2, 3]
، قابلة للتغيير، ولا يمكن استخدامها كمفاتيح القواميس (مفاتيح القاموس غير قابلة للتغيير في بايثون). أما التعديدات: (1, 2, 3)
، فهي غير قابلة للتغيير وبالتالي يمكن استخدامها كمفاتيح القواميس، شريطة أن تكون جميع عناصر التعديد غير قابلة للتغيير. يمكن استخدام عامل +
لسَلسَّلة لتعديدتان، والتي لا تُعدل محتوياتها بشكل مباشر، بل تنتج تعديدة جديدة تحتوي على عناصر التعديدتين المقدمة. وبالتالي، بالنظر إلى المتغير t
الذي يساوي مبدئيًا (1, 2, 3)
,، فإن إجراء t = t + (4, 5)
يقيِّم أولاً t + (4, 5)
، والذي ينتج (1, 2, 3, 4, 5)
، والتي تعين بعد ذلك إلى t
، وبالتالي "تعديل محتويات"t
بشكل فعال، مع التوافق مع الطبيعة الثابتة لكائنات التعديدة. ويجدر العلم إلى أن الأقواس اختيارية لمجموعة التعديدات في سياقات لا لبس فيها.%
"لتنسيق سلسلة نصية". هذه الوظيفة مشابهة للتنسيق الخاص بالسلسلة النصية printf
في لغة سي، على سبيل المثال؛ "spam=%s eggs=%d" % ("blah", 2)
تقيّم ك"spam=blah eggs=2"
. في بايثون 3 و2.6+ استكمل هذا بواسطة طريقة format()
الخاصة ب الصنف str
على سبيل المثال "spam={0} eggs={1}".format("blah", 2)
. بايثون 3.6 أضافت"f-strings" التالي:blah = "blah"; eggs = 2; f"spam={blah} eggs={eggs}"
.
) رمزًا للهروب. أصبح استكمال السلسلة النصية متاحًا في بايثون 3.6 كـ " سلسلة منسقة حرفياً".r
. لا يفسر تسلسل الهروب. ومن ثم تكون السلاسل النصية الأولية مفيدة عندما تكون الخطوط المائلة العكسية الحرفية شائعة، مثل التعبيرات النمطية والمسارات بنمط ويندوز. بالمقارنة مع "اقتباس-@
" (@
-quoting) في سي شارب.a[key]
,أو [بداية: توقف]a[start:stop]
أو [بداية: توقف: خطوة]a[start:stop:step]
. الفهارس ذات أساس صفري، والفهارس السلبية تتعلق بالنهاية. تأخذ الشرائح العناصر من فهرس البداية حتى فهرس التوقف، ولكن لا تتضمنه. تسمح معلمة الشريحة الثالثة، المسماة خطوة أو مرحلة، بتخطي العناصر وعكسها. قد تهمل فهارس الشرائح، على سبيل المثال، تُرجع a[:]
نسخة من القائمة بالكامل. كل عنصر في الشريحة هو نسخة ضحلة.for
-loops.if
البرمجية.()eval
مقابل ()exec
دوال المرفقة (في ب ايثون 2،exec
هي عبارة برمجية) الأول للتعبيرات، والثاني للعبارات البرمجية.لا يمكن أن تكون العبارات جزءًا من تعبير، ل ذلك لا يمكن أن تحتوي القائمة وغيرها من الاشتمالات أو تعبيرات لامبدا (تعتبر كلها تعبيرات) على عبارات. وتبقى هناك حالة استثنائية تتمثل في أن عبارة المساواة (التعيين) مثل a = 1
لا يمكن أن تكون جزءًا من التعبير الشرطي لعبارة شرطية. وهذا يفيد في تجنب خطأ لغة سي الكلاسيكي عن غلطة في عامل التعيين =
لعامل المساواة ==
في الشروط: إذا كان (c = 1) {...} : {... }if (c = 1)
صالحًا من الناحية النحوية (ولكن غالبا هو غير مقصود) كشيفرة (كود) لغة سي بالمقابل ...:if c = 1
يسبب خطأً نحوياً في بايثون.
الطرق المطبقة على الكائنات هي دوال مرتبطة بصنف الكائن. نحوياً تمثيل. طريقة (قيمة)instance.method(argument)
. للطرق العادية والتجميل اللغوي للدوال من أجل صنف. طريقة (مثيل،قيمة)Class.method(instance, argument)
. طرق بايثون لديها معلمة صريحة ذات self
للوصول لبيانات المثيل، على النقيض من الذات الضمنية self
(أو هذه this
) في بعض لغات البرمجة الأخرى (مثل سي++ أو جافا أو سي-الكائنية أو روبي).
تستخدم بايثون تنويع البط ولديها نوع للكائنات ولكن ليس لديها نوع لأسماء المتغيرات. لا يتحقق من قيود النوع في وقت التجميع؛ بدلاً من ذلك، قد تفشل العمليات على كائن ما، مما يدل على أن الكائن المحدد ليس من النوع المناسب. على الرغم من تنويعها بشكل ديناميكي، بايثون منوعة بقوة، مما يمنع العمليات غير المعرّفة جيدًا (على سبيل المثال، إضافة رقم إلى سلسلة نصية) بدلاً من محاولة فهمها بشكل صامت.
تسمح بايثون للمبرمجين بتحديد أنواعهم الخاصة باستخدام الأصناف، والتي غالبًا ما تستخدم في البرمجة الكائنية. تنشأ مثيلات جديدة الأصناف عن طريق استدعاء الصنف (على سبيل المثال، ()SpamClass
أو()EggsClass
)، الأصناف هي مثيلات من نوع صنف علوي (نفسها مثيل لنفسها)، مما يسمح بالبرمجة الوصفية والانعكاس. قبل الإصدار 3.0، كان لدى بايثون نوعين من الأصناف: الطراز القديم والأسلوب الجديد. النحو لكلا الأسلوبين هو نفسه، والفرق هو ما إذا كان كائن object
الصنف موروثًا، بشكل مباشر أو غير مباشر (جميع الأصناف من النمط الجديد ترث من الكائن object
وهي مثيلات من النوع type
). في إصدارات بايثون 2 من بايثون 2.2 وما بعده، يمكن استخدام كلا النوعين من الأصناف. أزل المطورون أصناف الطراز القديم في بايثون 3.0.
الخطة طويلة المدى هي دعم التنويع التدريجي بدءاً من بايثون 3.5، تسمح اللغة نحوياً بتحديد أنواع ثابتة ولكن لا يتم التحقق منها في التنفيذ الافتراضي، سي بايثون. يدعم المدقق التجريبي للنوع الثابت والمسمى mypy التحقق من النوع في وقت التجميع.
^a غير قابل للوصول بشكل مباشر عن طريق الاسم
لدى بايثون الرموز المعتادة للمعاملات الحسابية (+
، -
، *
، /
)، عامل التقسيم المكمل لأسفل (دالة الجزء الصحيح) //
وعامل التقسيم مع باقي %
(حيث يمكن أن يكون الباقي سالبًا، على سبيل المثال 4% -3 ==-2
). واللغة لديها أيضًا العامل **
للرفع الأسي، على سبيل المثال 3**5 == 125
و0.5**9 == 3.0
، وعامل ضرب المصفوفة @
. تعمل هذه المعاملات الحسابية كما هو الحال في الرياضيات التقليدية؛ باستخدام نفس قواعد ترتيب العمليات الحسابية، يمكن أن يكون العامل ترميزاً ضمنياً (أيضاً يمكن أن يكون الرمزان +
و-
أحاديين لتمثيل الأرقام الموجبة والسالبة على التوالي). ينتج عن القسمة بين الأعداد نتائج ذات فاصلة عائمة. تغيّر سلوك القسمة في بايثون بشكل كبير بمرور الوقت:
/
هو عامل قسمة عدد صحيح إذا كان كلا المعاملين عددين صحيحين وخلاف ذلك قسمة بفاصلة عائمة. التقسيم للأعداد الصحيحة يقرب نحو 0، على سبيل المثال 7/3 == 2
و7/3- == 2-
.7/3 == 2
و7/3- == 3-
. أدخل عامل تقسيم المكمل لأسفل//
. لذا 3//7== 2
, 3 //7-== 3-
, 3// 7.5== 2.0
و3//7.5- == 3.0-
. تؤدي إضافة from __future__ import division
إلى أن يستخدم النموذج (module) قواعد بايثون 3.0 للقسمة (انظر أدناه).5/2 == 2.5
.في مصطلحات بايثون، /
هي القسمة الحقيقية (أو ببساطة القسمة)، و//
القسمة المكملة لأسفل. ولكن، قبل الإصدار 3.0 كان العامل /
يمثل القسمة الكلاسيكية (أي الأقليدية). التقريب نحو اللانهاية السلبية تضيف الاتساق، على الرغم من اختلافها عن معظم اللغات. على سبيل المثال، المعادلة صحيحة دائمًا. والمعادلة b*(a//b) + a%b == a
صالحة لكل من القيم الموجبة والسالبة لـ a
. بالمقابل، فإن الحفاظ على صحة هذه المعادلة يعني أنه في حين أن نتيجة a%b
هي في المجال نصف المفتوح ، حيث أن b
هو عدد صحيح موجب، يجب أن تقع في المجال عندما تكون b
سالبة.
يوفر بايثون دالة round
لتقريب العدد ذو الفاصلة العائمة إلى أقرب عدد صحيح. لفك التعقيد، يستخدم بايثون 3 التقريب لعدد زوجي: round(1.5)
round(2.5)
ناتج كليهما هو 2
. أما الإصدارات السابقة فتستخدم تقريبًا بعيدًا عن الصفر: round(0.5)
هو 1.0
، round(-0.5)
هو 1.0−
.
تسمح بايثون بالتعبيرات البوليانية بعلاقات المساواة المتعددة بطريقة تتوافق مع الاستخدام العام في الرياضيات. على سبيل المثال: التعبير a < b < c
، يتحقق بايثون ما إذا كانت a
أصغر من b
وb
أصغر من c
. بعكس اللغات المشتقة من سي التي تفسر هذا التعبير بشكل مختلف: في سي، يقوم التعبير أولاً بتقييم a < b
، مما يؤدي إلى 0 أو 1، ثم تتم مقارنة هذه النتيجة مع c
.
تستخدم بايثون حساب تدريج الدقة الاعتباطية لجميع العمليات الصحيحة. يوفر الصنف (أو النوع) Decimal
في نموذج decimal
أعداد عشرية بفاصلة عائمة وبدقة اعتباطية محددة مسبقاً والعديد من وسائل التقريب. ويوفر صنف Fraction
في نموذج fractions
الدقة الاعتباطية للأعداد الكسرية.
نظرًا لسعة مكتبة بايثون للرياضيات، ومكتبة الطرف الثالث نمباي التي توسع القدرات المحلية بشكل أكبر، استخدمت بايثون بشكل متكرر كلغة نصية علمية للمساعدة في حل عدة مسائل مثل معالجة البيانات العددية والتلاعب.
ابتداءً من بايثون 2.1، لاستخدام أحرف غير الأسكي في نص البرنامج، يجب عليك تحديد ترميز شفرة المصدر بشكل صريح في بداية الوحدة، على سبيل المثال:
# -*- coding: utf-8 -*- # أو # coding: utf-8
ولكن حتى لو اكتفيت بكتابة:
# coding: utf
"سيفهم" بايثون ما تقصد.
تدعم بايثون الوراثة المتعددة. ابتداءً من النسخة 2.3 تدعم بايثون خوارزمية سي 3، المقتبسة من لغة البرمجة ديلان لحل مشكل ترتيب حل الطريقة. بينما استعملت خوازمية البحث المتعمق الذي يطرح مشاكل في حالة الوراثة الألماسية.
# كود الطباعة في بايثون لإخراج عبارة print("مرحباً يا عالم")
مثال لحساب العمر:
from datetime import * #استدعاء الكل* من مكتبة الوقت والتاريخ dob = int(input("أدخل تاريخ الميلاد: ")) #يُطلب من المستخدم إدخال تاريخ ميلاده # العمل على المعطيات today = datetime.today() year = today.year age = int(year) - int(dob) # طباعة عمر المستخدم print ("{age}:عمرك هو")
مثال لاستخراج العدد العاملي:
# جرب هذا الكود في بايثون 3.4.3 def Factorial(num): new_num = 1 for count in range(num،1،-1): new_num *= count # ضرب النتيجة بالمحسوب return new_num limit = 9 for n in range(0,limit+1): print(n،'! = ' ،Factorial(n)،sep='') # بعد إدخال الكود ستحصل على: # # 0! = 1 # 1! = 1 # 2! = 2 # 3! = 6 # 4! = 24 # 5! = 120 # 6! = 720 # 7! = 5040 # 8! = 40320 # 9! = 362880
مثال لتكرار طباعه كلمة 5 مرات:
n = input(':الرجاء ادخال كلمة') print str(n) * 5
ملاحظة لبايثون 2 استعمل raw_input
.
كمثال غير بديهي يمكن اعتبار خوارزمية الترتيب السريع كمثال مختصر كالتالي:
def quicksort(list): if len(list) <= 1: return list pivotelement = list.pop() left = [element for element in list if element < pivotelement] right = [element for element in list if element >= pivotelement] return quicksort(left) + [pivotelement] + quicksort(right)
على وجه الخصوص،هنا، يتيح تدوين القائمة للمتغيرات على اليسار واليمين تمثيلًا مضغوطًا. للمقارنة، صياغة تكرارية لهذين الخطين:
... left, right = [], [] # انشاء قوائم فارغة لليمين واليسار pivotelement = list.pop() # أخر عنصر في القائمة تاخذه كعنوان مرجعي for element in list: # تكرار على العناصر المتبقية في القائمة... if element < pivotelement: #و مقارنة العنصر المحوري Pivot-Element left.append(element) # إذا كان اصغر،علق القائمة اليسرى else: right.append(element) # عدا ذلك، إذا لم يمكن اصغر، علّق القائمة اليمنى ...
هذا مجرد مثال واحد على الأعمال الكتابية التي تم توفيرها من خلال تدوين القائمة. في الواقع، في هذه الحالة تكون الصياغة التكرارية أسرع، لأنها تكرر مرة واحدة فقط في حقل "القائمة" وليس مرتين كما هو الحال في تدوين القائمة.
في بايثون يمكن إنشاء واجهة مستخدم رسومية (GUI) بسرعة مع تكينتر (كما هو الحال في لغة بيرل وتي سي إل). يوجد أيضًا مجموعة متنوعة من المغلفات الأخرى التي خدمات أخرى. كما بايثون توفر ارتباطات (bindings) لمجموعات أدوات واجهة المستخدم الرسومية مثل بي.باي جتك وباي كيوت وويكس بايثون وباي أوبج سي ومجموعة أدوات الضوء السريع (فاست لايت). بالإضافة إلى تيكينتر، يحتوي بايثون أيضا على وحدة للرسم: رسوميات "السلحفاة" (Turtle graphics).
import tkinter as tk window = tk.Tk() window.geometry("200x100") label = tk.Label(window, text="مرحباً يا عالم") label.pack() def commandW(): window.destroy() button = tk.Button(window, text="OK", command=commandW) button.pack()
import turtle from turtle import speed, reset, goto speed(0) reset() turtle.x = -200 turtle.y = 200 while turtle.y != -200: goto(turtle.x, turtle.y) turtle.x = - turtle.x turtle.y = - turtle.y goto(turtle.x, turtle.y) goto(0, 0) turtle.y = - turtle.y turtle.x = - turtle.x turtle.y -= 5
دائرة ملونة
نجمة
مربع
يعتبر الكثيرون مكتبة بايثون القياسية الكبيرة واحدة من أعظم نقاط قوة بايثون، نظرا لتوفيرها أدوات تناسب العديد من المهام. كما تدعم المكتبة العديد من التنسيقات والبروتوكولات القياسية مثل امتداد البريد الإلكتروني متعدد الأغراض (MIME) وبروتوكول نقل النص الفائق (HTTP) الخاصة بتطوير تطبيقات الويب، وتدعم أيضا وحدات لإنشاء واجهات المستخدم الرسومية، والاتصال بقواعد البيانات العلائقية، وتوليد أرقام شبه عشوائية، والحساب العشري بدقة اعتباطية والمعالجة بالتعبيرات النمطية، وكذا اختبار الوحدة. بعض أجزاء المكتبة القياسية تشمل الكثير من المميزات (على سبيل المثال، تنفيذ واجهة بوابة خادم ويب (WSGI) wsgiref
يتبع PEP 333)، ولكن أغلب الوحدات لا تحتوي على مميزات، وتتميز عن الوحدات الأخرى من خلال التعليمات البرمجية والتوثيق الداخلي وتراكيب الاختبار. بالمقابل، فإن عددًا قليلاً فقط من الوحدات يحتاج إلى تعديل أو إعادة كتابة لعمليات التنفيذ المختلفة، نظرًا لأن معظم المكتبة القياسية هي كود بايثون متعدد المنصات.
تضمّ مكتبة بايثون مجموعة من الوحدات القياسية وبعضها مدمج مع مفسّر بايثون وتتيح الوصول إلى عمليات ليست جزءًا من اللغة، ولكن الهدف منها هو إتاحة الوصول إلى العمليات الأساسية في نظام التشغيل مثل استدعاءات النظام أو زيادة كفاءة عمل المفسّر، يمكن زيادة عدد الوحدات في المكتبة القياسية بوحدات مكتوبة في سي أو بايثون.
ابتداءً من نوفمبر 2019، يحتوي مؤشر حزمة بايثون باي باي (بالإنجليزية: Python Package Index) (PyPI)، وهو المستودع الرسمي لبرامج بايثون التابعة لجهات خارجية، على أكثر من 200،000 حزمة مع مجموعة واسعة من الميزات، بما في ذلك:
يستعين المطورون لتطوير بايثون بشكل كبير بعملية اقتراح تحسين بايثون (PEP)، وهي الآلية الأساسية لاقتراح ميزات جديدة رئيسية، واستطلاع آراء المجتمع حول القضايا وقرارات تصميم بايثون. كما يغطي نمط ترميز بايثون في PEP 8. ويقوم مجتمع بايثون والمجلس التوجيهي بمراجعة الاقتراحات والتعليق عليها.
يتوافق تعزيز وتحسين اللغة مع تطوير التنفيذ المرجعي سي بايثون. القائمة البريدية بايثون ديف (python-dev) هي المنتدى الأساسي لتطوير اللغة. وتُناقش حالات محددة في نظام تتبع للعلل راوند آب المستضاف في bugs.python.org . في الأصل، جرى تطوير شيفرة بايثون البرمجية في مستودع ذاتية الاستضافة بتشغيل ميركوريال، حتى يناير 2017، حيث انتقل بايثون إلى غيت هاب.
هناك ثلاثة أنواع للإصدارات العامة الجديدة لسي بايثون، ويتميز كل نوع بزيادة جزء من رقم الإصدار:
أُعلن عن بايثون 3.9 ألفا1 في نوفمبر 2019 ومع اعتماد مقياس جديد يتمثل في إصدار سنوي، ثم أعلن الإصدار الأول من 3.9 سيصدر في نوفمبر 2020.
تُصدر أيضًا العديد من النسخ بصيغة ألفا وبيتا والنسخ المرشحة كمعاينات واختبارات قبل الإصدارات النهائية. على الرغم من وجود جدول تقريبي لكل إصدار، إلا أنه غالبًا ما يتأخر في الصدور إذا لم يكن الكود جاهزًا. يراقب فريق تطوير بايثون حالة الكود من خلال تشغيل مجموعة اختبارات للوحدة الكبيرة أثناء التطوير، واستخدام نظام BuildBot للتركيب المتواصل.
المؤتمر الأكاديمي الرئيسي حول بايثون هو باي كون. هناك أيضًا برامج توجيه خاصة للبايثون، مثل باي ليديز.
أغلب بيئات تطوير بايثون (بما في ذلك سي بايثون) تتضمن حلقة القراءة - التقييم - الطباعة (REPL) مما يسمح لها بالعمل كمترجم سطر الأوامر حيث يقوم المستخدم بإدخال البيانات بشكل تسلسلي ويتلقى النتائج على الفور.
تضيف القشور (Shells) الأخرى، بما في ذلك IDLE وآي بايثون، قدرات إضافية مثل الإكمال التلقائي المحسّن والاحتفاظ بحالة الجلسة وتعليم الصيغة. بالإضافة إلى بيئات التطوير المتكاملة القياسية لسطح المكتب، هناك بيئات تطوير متكاملة مستندة إلى متصفحات ويب؛ سايج مات (مخصص لتطوير برمجيات بايثون العلمية والرياضية)؛ بايثون إني وير، بيئة تطوير واستضافة تستند إلى متصفح ويب؛ وبيئة تطوير كانوبي المتكاملة، وهو بيئة تطوير متكاملة تجارية لبايثون ترتكز على الحوسبة العلمية.
سي بايثون، التنفيذ المرجعي لبايثون، مكتوب بسي، يلبي معيار سي 89 مع العديد من ميزات سي99 المحددة. يقوم بتجميع برامج بايثون في كود بايت متوسط ينفذ بعد ذلك بواسطة آلتها الافتراضية. يوزع سي بايثون مع مكتبة قياسية كبيرة مكتوبة في مزيج من سي، وبايثون. والمكتبة متاحة للعديد من المنصات، بما في ذلك ويندوز (فيستا والإصدارات الأحدث؛ نظام التشغيل ويندوز اكس بي والإصدارات الأقدم، ولكن بايثون 2.7 غير مدعوم حتى الآن ومعظم الأنظمة الشبيهة بيونيكس الحديثة). في فترة بايثون 1 و2، كانت قابلية المنصة واحدة من أولى أولوياتها، حيث كانت تدعم حتى في إم إس وأو إس/2، ولكن حاليا، انخفض الدعم للعديد من المنصات.
باي باي هو تنفيذ سريع، يوفر ترجمة في الوقت المناسب، متوافق مع بايثون 2.7 وبايثون 3.6. وهو أسرع من سي بايثون بالمقابل، فهو لا يدعم العديد من المكتبات المكتوبة بلغة ببايثون.
ستاكليس بايثون، انشقاق معروف لسي بايثون، ينفذ الخيوط الدقيقة دون استعمال رصة ذاكرة سي. مما يسمح بالبرامج المتزامنة بنطاق واسع.
مايكروبايثون وسيركويت بايثون هي متغيرات لبايثون 3 محسنة للتحكم الدقيق وهذا يشمل ليجو مايندستورمز اي في 3.
طورت برامج تجميع بايثون آنية أخرى، ولكنها الآن غير مدعومة: