Faragiri
العربية

كل اللغات

تعلم المكتبة القياسية بايثون

محلّل أوامر جاهز، منطقة زمنية تعرف رمضان، تجميع بلا حلقة، والوحدة التي تمنعك من كتابة رمز عشوائي بنفسك.

4الأقسام
3دقائق القراءة
4العمق

ستة استيرادات، بلا تبعيات

ما تصلح له كل وحدة، مجمّعة حسب المهمة

كل فرع هنا شيء يثبت الناس حزمة من أجله، وكل ورقة عليه موجودة على الجهاز أصلا.

  • أخذ وسائطسكريبت يشغّله آخرون
    • argparse: أعلام وأنواع وسطر استخدام مجانا
  • حلقات كنتِ على وشك كتابتهاتجميع، إقران، تقطيع
    • itertools.groupby: رتّبي على المفتاح أولا، أو يجمع مرتين
    • itertools.pairwise: أزواج متتالية، منذ بايثون 3.10
    • itertools.batched: دفعات، والأخيرة القصيرة محسوبة
  • إخراجه على الشاشةعروض، ومساحة على القرص
    • textwrap: يقتطع عند حد كلمة
    • shutil: البايتات الحرة، قبل الكتابة لا بعد الفشل
مثبتة أصلا
  • وقت ليس حسابافروق توقيت، وواحد يتغير مع رمضان
    • zoneinfo: Africa/Casablanca، لا رقم ساعات
  • أي شيء يراه غريبرموز، روابط، عناوين إعادة تعيين
    • secrets: ليست عشوائية، بل قابلة للتنبؤ من مخرجها

الفروع مهام لا فئات، لأن فهرس الوحدات منظم بالاتجاه الآخر، وهذا بالضبط سبب ألا يجدها أحد. الفرع الغائب عن هذا الشكل هو أي شيء يحتاج شبكة، وهناك تبدأ التبعية فعلا.

أغلب التبعيات الصغيرة في مشروع بايثون تستبدل شيئا مثبتا أصلا. ستة وحدات تغطي الأغلب، وكل واحدة استيراد واحد بلا نسخة يجب تثبيتها ولا شيء ينكسر يوم يتوقف صيانته.

argparse يحوّل سكريبتا إلى أمر. ap.add_argument("--limit", type=int, default=30) وقيمة خاطئة تخرج برسالة invalid int value: 'كثير' بعد طباعة سطر الاستخدام، قبل أن يعمل الكود على الإطلاق. action="store_true" يعطي خيار --dry-run، وتحليل ["سموحة", "--dry-run"] يجيب Namespace(branch='سموحة', dry_run=True, limit=30). لاحظي الشرطة السفلية: شرطة في اسم الخيار تتحول إلى شرطة سفلية في الاسم.

zoneinfo يتولى الجزء من الوقت الذي ليس حسابا. ZoneInfo("Africa/Casablanca") يعرف أن المغرب يعيد الساعة إلى التوقيت العادي في رمضان ثم يعيدها بعده، وهذا تحول حقيقي لا يمثله رقم ثابت من الساعات أبدا. هذا هو السبب في استخدام قاعدة بيانات مناطق زمنية حقيقية لا عدد صحيح من الساعات، وهو في المكتبة القياسية منذ بايثون 3.9.

ثلاثة تحل محل حلقة كنتِ على وشك كتابتها

itertools.groupby يطوي حلقة تجميع، بشرط واحد يوقع فيه الجميع: يجمع فقط التشغيلات المتجاورة فعلا، فيجب أن تكون الصفوف مرتبة على المفتاح نفسه أولا. على صفوف استلام مرتبة يعطي 'سموحة' مع ['فستان', 'قميص'] ثم 'جليم'. مدخل غير مرتب ينتج المفتاح نفسه مرتين بصمت.

itertools.pairwise يعطي أزواجا متتالية: [(22, 24), (24, 27)] من ثلاث قراءات حرارة، وهي كل حلقة فرق بين قيمتين متتاليتين كُتبت يوما، في نداء واحد، منذ بايثون 3.10. itertools.batched يقسّم متتالية إلى دفعات: [('A', 'B', 'C'), ('D', 'E', 'F'), ('G',)]، والدفعة الأخيرة القصيرة هي الحالة التي يخطئها المقسّم المكتوب يدويا.

واحدة قرار أمان لا راحة

secrets هي التي يجب معرفتها بالاسم. secrets.token_urlsafe(16) تعيد نصا من 22 محرفا آمنا لوضعه في رابط، مسحوبا من مصدر تشفيري في نظام التشغيل. وحدة random ليست كذلك: سريعة، قابلة لإعادة الإنتاج، وقابلة للتنبؤ من مخرجه، وهذا صحيح تماما لخلط ورق اللعب وخاطئ تماما لرابط إعادة تعيين كلمة مرور. استخدام random حيث ينتمي secrets ثغرة حقيقية لا يفشل أي اختبار فيها، وهذا سبب وجود الوحدتين منفصلتين.

textwrap وshutil يسدّان الفجوات حول ما سبق. textwrap.shorten يعطي رف طويل جدا ...، مقتطعا عند حد كلمة لا في منتصفها، وshutil.disk_usage("/").free يجيب بالبايت، وهو الفحص الذي ينبغي لسكريبت يكتب ملفات أن يجريه قبل أن يبدأ لا بعد أن يفشل.

الفهرس الذي تفتحينه في 2026

فهرس وحدات المكتبة القياسية هو الأداة، مجاني، والعادة التي تستحق البناء هي فتحه قبل إضافة تبعية لا بعدها. حلّ محل البحث عن حزمة أولا، وهو بحث يجد واحدة عادة لأن أحدا نشر حزمة لكل شيء في هذه القائمة.

بايثون 3.14 هو ما تفترضه هذه الإصدارات، مجاني ومفتوح المصدر. ثلاث من الوحدات الست أعلاه اكتسبت دالتها المذكورة هنا بعد 2020، فمشروع مثبت على مفسر قديم يملك أقل مما تقترحه هذه الصفحة، وتفقّد ملاحظة الإصدار في التوثيق عادة عشر ثوان تمنع خطأ استيراد محيرا.

لماذا لا يبحث أحد عن الاسم الصحيح

العطل ألا تعرفي ما تبحثين عنه، ولا كمية قراءة تصلح هذا مباشرة. لا أحد يبحث عن pairwise وهو لا يعرف الكلمة، والحلقة التي تحسب الفروق بين قراءات متتالية تُكتب يدويا مئة مرة لأنها سهلة بما يكفي لتُكتب.

ما ينجح فعلا هو قراءة فهرس وحدة واحدة كلما كتبتِ حلقة تشعرين أنها عامة. حلقة تجمّع أو تقسّم أو تزاوج أو تعد أو تسطّح هي واحدة من ثماني دوال في itertools وcollections، وربع ساعة مع هذين الفهرسين أعلى قراءة عائدا في هذه اللغة. الأساليب التي تستبدلها هذه الدوال موضوعها أساسيات بايثون، وما تفعلينه حين يكون الجواب فعلا تبعية خارجية هو موضوع الحزم والبيئات.

بجانب هذه العقدة

فوق هذه العقدة