بايثون (لغة برمجة)
النحو (بناء اللغة) والدلالات > التنويع

تستخدم بايثون تنويع البط ولديها نوع للكائنات ولكن ليس لديها نوع لأسماء المتغيرات. لا يتحقق من قيود النوع في وقت التجميع؛ بدلاً من ذلك، قد تفشل العمليات على كائن ما، مما يدل على أن الكائن المحدد ليس من النوع المناسب. على الرغم من تنويعها بشكل ديناميكي، بايثون منوعة بقوة، مما يمنع العمليات غير المعرّفة جيدًا (على سبيل المثال، إضافة رقم إلى سلسلة نصية) بدلاً من محاولة فهمها بشكل صامت.
تسمح بايثون للمبرمجين بتحديد أنواعهم الخاصة باستخدام الأصناف، والتي غالبًا ما تستخدم في البرمجة الكائنية. تنشأ مثيلات جديدة الأصناف عن طريق استدعاء الصنف (على سبيل المثال، ()SpamClass أو()EggsClass)، الأصناف هي مثيلات من نوع صنف علوي (نفسها مثيل لنفسها)، مما يسمح بالبرمجة الوصفية والانعكاس.
قبل الإصدار 3.0، كان لدى بايثون نوعين من الأصناف: الطراز القديم والأسلوب الجديد. النحو لكلا الأسلوبين هو نفسه، والفرق هو ما إذا كان كائن object الصنف موروثًا، بشكل مباشر أو غير مباشر (جميع الأصناف من النمط الجديد ترث من الكائن object وهي مثيلات من النوع type). في إصدارات بايثون 2 من بايثون 2.2 وما بعده، يمكن استخدام كلا النوعين من الأصناف. أزل المطورون أصناف الطراز القديم في بايثون 3.0.
الخطة طويلة المدى هي دعم التنويع التدريجي بدءاً من بايثون 3.5، تسمح اللغة نحوياً بتحديد أنواع ثابتة ولكن لا يتم التحقق منها في التنفيذ الافتراضي، سي بايثون. يدعم المدقق التجريبي للنوع الثابت والمسمى mypy التحقق من النوع في وقت التجميع.
| نوع | قابلية التغيير | وصف | مثال نحوي |
| --- | --- | --- | --- |
| bool | غير قابل للتغيير | قيمة بوليانية | True False |
| bytearray | قابل للتغيير | سلسلة من البايتات | bytearray(b'Some ASCII') bytearray(b"Some ASCII") bytearray([119, 105, 107, 105]) |
| bytes | غير قابل للتغيير | سلسلة من البايتات | b'Some ASCII' b"Some ASCII" bytes([119, 105, 107, 105]) |
| complex | غير قابل للتغيير | عدد معقد مكون من قسم للأعداد الحقيقية وقسم للأعداد الخيالية | 3+2.7j |
| dict | قابل للتغيير | مصفوفة (أو قاموس) ترابطية لأزواج المفتاح والقيمة ؛ من الممكن أن تحتوي على أنواع مختلطة (مفاتيح وقيم)، يجب أن تكون المفاتيح من النوع القابل للتجزئة (hashable). | {'key1': 1.0, 3: False} {} |
| ellipsis | غير قابل للتغيير | عامل حامل مكان  ‏ القطع ناقص تستخدم كفهرس في مصفوفات نمباي. | ... Ellipsis |
| float | غير قابل للتغيير | النقطة العائمة مزدوج الدقة. تعتمد الدقة على الآلة ولكن في الممارسة تنفذ بشكل عام كرقم 64-بت معيار أي إي إي إي 754، بـ53 بت من الدقة. |  1.414  math.pi  -math.inf  math.nan |
| frozenset | غير قابل للتغيير | مجموعة set غير مرتبة، لا تحتوي على تكرارات؛ يمكن أن تحتوي على أنواع مختلطة، إذا كانت قابلة للحمل (hashable) | frozenset([4.0, 'string', True]) |
| int | غير قابل للتغيير | عدد صحيح غير محدود الحجم | 42 |
| list | قابل للتغيير | قائمة، يمكن أن يحتوي أنواع مختلطة | [4.0, 'string', True] [] |
| NoneType | غير قابل للتغيير | كائن يمثل عدم وجود قيمة، يطلق عليها غالبًا الصفر (Null بلغات أخرى) | None |
| NotImplementedType | غير قابل للتغيير | حامل مكان يمكن إرجاعه من عوامل التحميل الزائد للإشارة إلى أنواع المعالجات غير المعتمدة. | NotImplemented |
| range | غير قابل للتغيير | سلسلة من الأرقام شائعة الاستخدام للتكرار الحلقي عدداً معيناً في الحلقات  | range(1, 10) range(10, -5, -2) |
| set | قابل للتغيير | مجموعة غير مرتبة، لا تحتوي على نسخ مزدوجة، يمكن أن تحتوي على أنواع مختلطة، إذا كانت قابلة للحمل (hashable) | {4.0, 'string', True} set() |
| str | غير قابل للتغيير | حرف سلسة نصية: سلسلة من نقاط لشيفرة خاصة بيونيكود | 'Wikipedia' "Wikipedia" """Spanning multiple lines"""  |
| tuple | غير قابل للتغيير | يمكن أن يحتوي عناصر مختلطة | (4.0, 'string', True) ('single element',) () |
^a غير قابل للوصول بشكل مباشر عن طريق الاسم