بايثون هي لغة متعددة الاستخدامات ويمكن الوصول إليها، مما يجعلها خيارًا شائعًا للمبتدئين. ومع ذلك، فهو يوفر أيضًا ميزات متقدمة قد تبدو معقدة في البداية. يعد فهم هذه المفاهيم المعقدة أمرًا ضروريًا لكتابة كود بايثون الفعال والقابل للصيانة والأداء.
في هذه المقالة، سنستكشف بعض المفاهيم الأكثر تعقيدًا في بايثون، مثل المولدات، وأدوات الديكور، ومديري السياق، وتعبيرات لامدا، والفئات الوصفية. سنناقش الأسئلة التي يجب طرحها حول وقت استخدامها وسنقدم أمثلة على التعليمات البرمجية لتوضيح استخدامها.
ما هو المولد؟
المولد عبارة عن وظيفة تسمح لك بإنشاء مكرر مخصص باستخدام الكلمة الأساسية الخاصة بالعائد. بدلاً من إرجاع قيمة واحدة، ينتج المولد سلسلة من القيم أثناء تكراره.
متى يستخدم؟
عندما تعمل مع تسلسلات بيانات كبيرة وتريد حفظ الذاكرة.
عندما تحتاج إلى حسابات كسولة، أي أنك لا تريد حساب جميع القيم مقدمًا.
لإنشاء تدفقات بيانات لا حصر لها أو يحتمل أن تكون لا حصر لها.
رمز المثال
def compteur_infini(): n = 0 while True: yield n n = 1 # Utilisation compteur = compteur_infini() print(next(compteur)) # Sortie: 0 print(next(compteur)) # Sortie: 1 print(next(compteur)) # Sortie: 2
لماذا يعمل؟
كل استدعاء إلى next(counter) ينفذ الوظيفة حتى بيان العائد التالي، ويعيد القيمة ويعلق حالة الوظيفة حتى الاستدعاء التالي.
ما هو مصمم الديكور؟
الديكور هو وظيفة تسمح لك بتعديل أو إثراء سلوك وظيفة أو طريقة أخرى دون تغيير كود المصدر الخاص بها. يأخذ دالة كمدخل، ويضيف إليها وظيفة، ويعيد دالة جديدة.
متى يستخدم؟
لإثراء الوظائف برمز إضافي (التسجيل، التحكم في الوصول، المهلة).
لتجنب تكرار التعليمات البرمجية عندما تتطلب وظائف متعددة سلوكًا مشابهًا.
لفصل المخاوف، والحفاظ على نظافة الكود الرئيسي.
رمز المثال
def journalisation(func): def wrapper(*args, **kwargs): print(f"Appel de {func.__name__} avec {args} {kwargs}") result = func(*args, **kwargs) print(f"{func.__name__} a retourné {result}") return result return wrapper @journalisation def addition(a, b): return a b # Utilisation resultat = addition(5, 3) # Sortie: # Appel de addition avec (5, 3) {} # addition a retourné 8
لماذا يعمل؟
يغلف مصمم التسجيل وظيفة الإضافة، ويضيف الرسائل قبل وبعد تنفيذها.
ما هو مدير السياق؟
مدير السياق هو هيكل يسمح لك بإدارة الموارد (الملفات والاتصالات وما إلى ذلك) من خلال التأكد من تهيئتها وتنظيفها بشكل صحيح. ويستخدم الأساليب enter وexit ويستخدم بشكل عام مع العبارة with.
متى يستخدم؟
لإدارة الموارد التي تتطلب التنظيف (إغلاق ملف، تحرير الاتصال).
للتأكد من أن الاستثناءات لا تمنع تنظيف الموارد.
لتحسين إمكانية قراءة التعليمات البرمجية عند إدارة الموارد.
رمز المثال
class GestionFichier: def __init__(self, nom_fichier, mode): self.nom_fichier = nom_fichier self.mode = mode self.fichier = None def __enter__(self): self.fichier = open(self.nom_fichier, self.mode) return self.fichier def __exit__(self, exc_type, exc_val, exc_tb): if self.fichier: self.fichier.close() # Utilisation with GestionFichier('test.txt', 'w') as f: f.write('Bonjour, monde!')
لماذا يعمل؟
يضمن مدير السياق إغلاق الملف تلقائيًا، حتى في حالة حدوث استثناء أثناء الكتابة.
ما هو تعبير لامدا؟
تعبير لامدا هو دالة مجهولة يتم تعريفها باستخدام الكلمة الأساسية لامدا. يمكن أن يستغرق وسيطات متعددة ولكن يمكن أن يحتوي فقط على تعبير واحد.
متى يستخدم؟
لإنشاء وظائف سريعة وسهلة، عادةً ما تكون وسيطة لوظيفة أخرى.
عندما يكون تعريف الوظيفة الكاملة مطولًا بشكل مفرط بالنسبة لمهمة بسيطة.
لإجراء حسابات بسيطة في هياكل البيانات.
رمز المثال
# Liste de nombres nombres = [1, 2, 3, 4, 5] # Utilisation de lambda pour doubler les nombres doubles = list(map(lambda x: x * 2, nombres)) print(doubles) # Sortie: [2, 4, 6, 8, 10]
لماذا يعمل؟
يتم تمرير التعبير lambda lambda x:x*2 إلى الخريطة، مما يطبقه على كل عنصر في القائمة.
متى يستخدم؟
لتعديل إنشاء الفئات، على سبيل المثال عن طريق حفظ الفئات أو تعديلها.
لتنفيذ Singletons أو ORMs أو الأطر التي تتطلب تعديلات فئة ديناميكية.
عندما لا تكون أدوات تزيين الفصل كافية لمستوى التحكم المطلوب.
رمز المثال
class EnregistrementClasses(type): registre = {} def __new__(cls, name, bases, attrs): new_class = super().__new__(cls, name, bases, attrs) cls.registre[name] = new_class return new_class class MonObjet(metaclass=EnregistrementClasses): pass class MonAutreObjet(MonObjet): pass # Utilisation print(EnregistrementClasses.registre) # Sortie: {'MonObjet':, 'MonAutreObjet': }
لماذا يعمل؟
تقوم فئة Metaclasses RegisterClasses بتعديل طريقة الجديدة لحفظ كل فئة تم إنشاؤها في السجل.
توفر المفاهيم المعقدة في لغة بايثون، مثل المولدات وأدوات الديكور ومديري السياق وتعبيرات لامدا والفئات الوصفية، قوة ومرونة كبيرة للمطورين ذوي الخبرة. ومن خلال فهم متى وكيف يتم استخدامها، يمكنك كتابة تعليمات برمجية أكثر كفاءة وقابلية للقراءة وقابلة للصيانة.
عندما تواجه مشكلة معقدة، اسأل نفسك الأسئلة التالية:
هل أحتاج إلى إدارة الموارد بشكل آمن؟ (مديرو السياق)
هل يمكنني الاستفادة من الحسابات الكسولة؟ (المولدات)
هل يمكنني إثراء سلوك الوظيفة دون تعديلها؟ (مصممو الديكور)
هل أحتاج إلى وظائف بسيطة لعمليات لمرة واحدة؟ (تعبيرات لامدا)
هل يجب أن أتحكم في إنشاء الفصول؟ (الفئات التعريفية)
من خلال الإجابة على هذه الأسئلة، يمكنك تحديد ما إذا كان أي من هذه المفاهيم المعقدة مناسبًا لموقفك.
الكتب:
لغة بايثون بطلاقة لوتشيانو رامالهو.
بايثون الفعالة بقلم بريت سلاتكين.
الوثائق الرسمية:
مولدات
ديكور
مديرو السياق
تعبيرات لامدا
الفئات الوصفية
الدروس:
فهم المولدات في بايثون
دليل مصممي الديكور إلى لغة بايثون
استخدام مديري السياق
شكرا للقراءة! لا تتردد في مشاركة تجاربك الخاصة أو طرح الأسئلة في التعليقات.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3