بيثون: الواردات في بداية البرنامج الرئيسي و PEP 8

StackOverflow https://stackoverflow.com/questions/1565173

سؤال

ال بيب 8 يوصي باستيراد الوحدات النمطية في بداية البرامج.

الآن ، أشعر أن استيراد بعضهم في بداية الأساسية البرنامج (أي بعد if __name__ == '__main__') من المنطقي. على سبيل المثال ، إذا قرأ البرنامج الرئيسي وسيطات من سطر الأوامر ، فأنا أميل إلى القيام به import sys في بداية الأساسية البرنامج: بهذه الطريقة ، sys لا يجب استيراده عند استخدام الكود كوحدة ، حيث لا توجد حاجة ، في هذه الحالة ، للوصول إلى وسيطة سطر الأوامر.

ما مدى سوء هذا الانتهاك لـ PEP 8؟ هل يجب أن امتنع عن القيام بذلك؟ أم أنه من المعقول تعديل PEP 8؟

هل كانت مفيدة؟

المحلول

لا أستطيع حقًا أن أخبرك بمدى سوء القيام بذلك.

ومع ذلك ، فقد قمت بتحسين الأداء بشكل كبير (وقت الاستجابة ، التحميل) لتطبيق الويب من خلال استيراد بعض المكتبات فقط عند الاستخدام الأول.

راجع للشغل ، ما يلي أيضا من بيب 8:

ولكن الأهم من ذلك: معرفة متى تكون غير متسق - في بعض الأحيان لا ينطبق دليل النمط. عندما تكون في شك ، استخدم أفضل حكمك. انظر إلى أمثلة أخرى وقرر ما يبدو أفضل. ولا تتردد في السؤال!

نصائح أخرى

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

لكن sys بالتأكيد سأستورد مبكرًا ، في القمة. إنها وحدة شائعة ، من المحتمل جدًا أنك قد تستخدم SYS في مكان آخر في البرنامج النصي الخاص بك ولا تلاحظ أنه لم يتم استيراده دائمًا. sys هي أيضًا واحدة من الوحدات النمطية التي يتم تحميلها دائمًا بواسطة Python نفسها ، لذلك لا تنقذ أي وقت بدء تشغيل الوحدة النمطية عن طريق تجنب الاستيراد (وليس هناك الكثير من بدء التشغيل لـ SYS على أي حال).

أوصيك أن تفعل ما تشعر أنه أكثر ملاءمة عندما لا يوجد شيء في PEP عن قلقك.

لا يستغرق استيراد SYS هذا الوقت طويلاً حتى أشعر بالقلق حيال ذلك. بعض الوحدات تستغرق وقتا أطول. لا أعتقد أن SYS يسد حقًا مساحة الاسم. لن أستخدم متغيرًا أو فئة تسمى SYS بغض النظر.

إذا كنت تعتقد أنه يضر أكثر مما يهدف إلى الحصول عليه في الأعلى ، فكل الوسائل ، كما تريد. PEP 8 هو مجرد خط دليل والكثير من التعليمات البرمجية التي تراها لا تتوافق معها.

المشكلة ليست أداء.

القضية هي الوضوح.

برنامجك "الرئيسي" ليس سوى برنامج رئيسي اليوم. غدًا ، قد تكون مكتبة مدرجة في برنامج رئيسي من المستوى الأعلى. في وقت لاحق ، ستكون مجرد وحدة واحدة في حزمة أكبر.

نظرًا لأن حياة برنامجك "الرئيسي" قد تتغير ، فلديك ردودان.

  1. عزل الأشياء "الرئيسية" في الداخل if __name__ == "__main__". هذا ليس انتهاكًا بشعًا لـ PEP-8. هذه طريقة معقولة لتعبئة الأشياء.

  2. حاول الحد من عدد الميزات في البرامج النصية "الرئيسية" الخاصة بك. حاول أن تبقيهم على importS و if __name__ == "__main__" أمور. إذا كان البرنامج النصي الرئيسي صغيرًا ، فإن سؤال الاستيراد الخاص بك يختفي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top