بنية بايثون صغيرة وأساليبها ليست كذلك، والفجوة بين بايثون التي تعمل وبايثون المتقنة نحو ثمانية من هذه الأساليب. خذي ملف أدوية بثلاثة صفوف، ("PRC-14", 3, 12.5) واثنين مثله، فوق أساس المتغيرات والأنواع الذي تفترضه هذه الصفحة، والفرق يظهر في كل سطر.
- تفكيك في رأس الحلقة:
for code, stock, price in rowsبدلr[0], r[1], r[2] enumerate(rows, start=1)حين يُحتاج إلى الموضع، فتعطي(1, 'PRC-14')بلا عداد يُصانdict(zip(codes, prices))يبني{'PRC-14': 12.5, 'PRC-15': 8.0, 'PRC-16': 4.25}في سطر واحدfirst, *rest = codesتجيب'PRC-14'و['PRC-15', 'PRC-16']codes[::-1]يعكس دون لمس الأصل- استيعاب قاموس مع ترشيح:
{c: s for c, s, _ in rows if s}يسقط الصنف الناقد ويجيب{'PRC-14': 3, 'PRC-16': 7}
شيئان أحدث من أغلب الدروس
f-string تنتهي بعلامة يساوي تطبع التعبير مع قيمته: f"{total=}" تعطي total=24.75. هذه طباعة تصحيح لا يمكن أن تنحرف عن الاسم الذي تُبلغ عنه، ووصلت في بايثون 3.8. التنسيق يضيف: f"{revenue:,} دينار عبر {len(branches)} فروع" يضع فواصل الآلاف فتعطي 118,000 دينار عبر 3 فروع.
عامل المشي يسند داخل شرط، فتُحسب القيمة مرة واحدة وتبقى: if (comma := line.find(",")) != -1: ثم line[:comma]. بدونه يعمل find مرتين أو يُربط اسم في السطر الأعلى ويعيش أطول مما ينبغي. يستحق هذا القدر بالضبط ولا أكثر، ولهذا القاعدة أن يُستخدم فقط حين يكون البديل نداء متكررا.
مفتاح فرز يحمل اتجاهين
الفرز حسب شيئين حين يكون أحدهما تنازليا لا يحتاج دالة مقارنة ولا تمريرتين. انفي المفتاح العددي: sorted(rows, key=lambda r: (-r[1], r[0])) يضع الأعلى مخزونا أولا ويفض التعادل أبجديا، فيتقدم PRC-16 بسبعة على PRC-14 بثلاثة. المقارنة بين الصفوف تتم من اليسار إلى اليمين، وهذه هي القاعدة كلها.
هذه الحيلة تعمل على الأرقام فقط. لمفتاح نصي تنازلي الجواب فرزتان بترتيب معاكس، اعتمادا على الاستقرار.
ما تشغّلينه في 2026
Ruff يحمل معظم هذا آليا، مجاني ومفتوح المصدر، وهو الفاحص الافتراضي في مشاريع بايثون اعتبارا من 2026. قواعده تسمّي الحلقة التي كان ينبغي أن تكون استيعابا، وrange(len(x)) الذي كان ينبغي أن يكون enumerate، والفهرس اليدوي الذي كان ينبغي أن يكون تفكيكا. حلّ محل تعلّم هذه الأساليب واحدة تلو الأخرى من مراجعة الكود، وهو ما يعمل ويستغرق نحو سنتين.
بايثون 3.14 هو الإصدار الذي ينبغي العمل عليه، مجاني، ورسائل خطئه هي السبب العملي لا أي ادعاء سرعة. حلّ محل بايثون 3.13، ولهذه الأساليب الإصدار الذي يهم هو 3.8 من أجل f-string والعامل walrus، وهو قديم بما يكفي ليكون أي شيء ما زال يعمل بدونهما قيدا يستحق أن يُذكر لا تفضيلا.
أين تضيع الساعتان الأوليان
العطل أن تصلي من لغة أخرى وتكتبي تلك اللغة بصياغة بايثون، فيعمل بلا عيب وتُوصف في المراجعة بأنها غير بايثونية دون أن يشرح أحد التكلفة. التكلفة حقيقية: for i in range(len(rows)) متبوعا بسطر rows[i][0] هو ثلاث فرص لإخطاء الفهرس في كل سطر، والنسخة المفككة بلا فهرس على الإطلاق.
الفحص الذي يختصر السنتين: كلما ظهر فهرس مرتين في سطر واحد، هناك أسلوب بديل. وكلما بُنيت قائمة مؤقتة لتُطاف عليها فقط، هناك استيعاب أو مولّد. راجعي المكتبة القياسية قبل أن تكتبي ما هو مبني فيها أصلا، ثم الفرز حين يتجاوز الترتيب ما يفعله مفتاح واحد.