بيثون يوفر العديد من الاحتمالات لتبسيط وهيكلة التعليمات البرمجية ، والديكور هي واحدة من هذه الأداة. الديكور هي وظائف تسمح لك بتحويل وظائف أو فئات أخرى دون تغيير شفرة المصدر الخاصة بهم.
باستخدام الديكور ، يمكن للمطورين إضافة سلوك إلى وظيفة أو فئة ، والتفاف قبل وبعد المعالجة التعليمات البرمجية حول وظيفة ، وإجراء الشيكات وقت التشغيل أو القياسات ، وأكثر من ذلك بكثير.
الديكور في بيثون هي نوع خاص من " @ " المشغل وتوفير وسيلة المدمجة لتطبيق وظائف الديكور إلى وظائف أو الطبقات. يمكن استخدام الديكور لتحديد سلوك دالة أو فئة قبل وبعد تنفيذ التعليمات البرمجية داخل دالة مزخرفة أو طريقة فئة. لإنشاء ديكور ، يمكنك استخدام وظائف أو فئات منتظمة ، ولكن مع بناء جملة خاص.
مثال على استخدام الديكور:
@ديكور
ديف وظيفتي ():
# رمز الوظيفة
في هذا المثال ، سيتم تطبيق الديكور "الديكور "على وظيفة"وظيفتي". هذا يعني أنه سيتم تنفيذ رمز الديكور قبل وبعد تنفيذ الكود داخل"وظيفتي". يتيح لك ذلك إضافة سلوك إضافي إلى وظيفة دون تغيير شفرة المصدر الخاصة بها.
- تحديد الديكور ودورها في بايثون
- مزايا استخدام الديكور في بايثون
- 1. فصل الوظائف
- 2. رمز الديكور
- 3. توسيع الوظائف
- 4. تحسين قراءة التعليمات البرمجية
- 5. إعادة استخدام الكود
- أمثلة على استخدام الديكور في بايثون
- كيفية إنشاء الديكور الخاص بك في بايثون
- سؤال وجواب
- ما هي الديكور في بيثون وما هي التي تستخدم ل?
- كيف يمكنني إنشاء الديكور في بيثون?
- هل من الممكن استخدام الديكور متعددة لوظيفة واحدة?
- هل من الممكن تطبيق الديكور إلى فئة?
تحديد الديكور ودورها في بايثون
الديكور هي نوع خاص من وظائف الثعبان التي تأخذ وظيفة أخرى كحجة وإرجاع وظيفة. يتم استخدامها لتغيير وظائف أو سلوك الوظائف الأخرى عن طريق إضافة رمز أو وظيفة إضافية إليها دون الحاجة إلى تغيير رمز الوظيفة الرئيسية.
يسمح لك المصممون بإضافة وظائف شائعة أو متكررة إلى عدة وظائف مختلفة دون تغيير رمز كل وظيفة على حدة. كما أنها توفر طريقة ملائمة لتعديل سلوك الوظائف دون الحاجة إلى كتابة رمز مكرر في كل وظيفة.
تعريف الديكور له الهيكل التالي:
- الديكور هو وظيفة تأخذ وظيفة أخرى كوسيطة.
- يحدد المصمم وظيفة جديدة تلتف على الوظيفة الأصلية.
- يقوم المصمم بإرجاع هذه الوظيفة الجديدة.
وغالبا ما تستخدم الديكور ل:
- تسجيل: إضافة تسجيل لتتبع تنفيذ وظيفة.
- قياسات وقت التنفيذ: قياس وعرض وقت تنفيذ وظيفة.
- المصادقة والترخيص: التحقق من تفويض المستخدم قبل أداء الوظيفة.
- التخزين المؤقت: حفظ نتائج تنفيذ وظيفة لإعادة استخدامها.
- تصحيح الأخطاء: إضافة معلومات إضافية لوظائف التصحيح.
مثال على استخدام الديكور:
| نموذج التعليمات البرمجية | الوصف |
|---|---|
| @ديكور_مع_حجج (أر 1 ، أر 2) | وظيفة ديف(): |
تمريرة
تطبيق الديكور مع الحجج إلى وظيفة
وظيفة
.
من المهم ملاحظة أنه يتم تنفيذ الديكور عند تحديد وظيفة ، وليس عند الاتصال بها. هذا يعني أنه يتم تنفيذ رمز الديكور قبل استدعاء الوظيفة الملفوفة بواسطة الديكور.
مزايا استخدام الديكور في بايثون
في بايثون ، الديكور عبارة عن سكر نحوي خاص يسمح لك بتعديل سلوك الوظائف أو الفئات دون تغيير شفرة المصدر الخاصة بهم. يمكن أن يؤدي استخدام الديكور إلى تبسيط الكتابة والقراءة وفهم الكود إلى حد كبير ، فضلا عن زيادة نمطية وقابلية إعادة الاستخدام.
1. فصل الوظائف
تتمثل إحدى المزايا الرئيسية لاستخدام الديكور في القدرة على تقسيم الوظائف إلى أجزاء صغيرة ودمجها. هذا يجعل من السهل إضافة أو إزالة الوظائف دون تغيير الكود الرئيسي ، مما يجعل الكود أكثر مرونة وصيانته. على سبيل المثال ، يمكنك إنشاء ديكور لتسجيل تنفيذ وظيفة ، والتي سيتم تطبيقها على أي وظيفة تتطلب هذه الوظيفة.
2. رمز الديكور
يتيح لك استخدام الديكور إضافة رمز إضافي قبل وبعد تنفيذ وظيفة أو فئة دون تغيير شفرة المصدر الخاصة بهم. يمكن أن يكون هذا مفيدا ، على سبيل المثال ، للتحقق من صحة بيانات الإدخال أو نتائج التخزين المؤقت أو قياس وقت التنفيذ. تساعد زخرفة الكود على تجنب تكرار الكود وإنشاء بنية برنامج أنظف وأكثر كفاءة.
3. توسيع الوظائف
يسهل المصممون توسيع وظائف الوظائف أو الفئات الموجودة دون تغيير شفرة المصدر الخاصة بهم. على سبيل المثال ، يمكنك إنشاء ديكور لتخزين نتائج وظيفة ، والتي يمكن أن تحسن كثيرا من أداء البرنامج. يمكنك أيضا إنشاء ديكور للتحقق من حقوق الوصول إلى وظائف أو فئات معينة ، مما يزيد من أمان التطبيق. يتيح لك توسيع الوظائف مع الديكور إنشاء برامج مرنة وقابلة للتطوير.
4. تحسين قراءة التعليمات البرمجية
يسمح لك المصممون بإخراج منطق إضافي من الكود الرئيسي ، مما يجعله أكثر قابلية للقراءة والفهم. غالبا ما يستخدم المصممون لإجراء عمليات نموذجية مثل التسجيل والتحقق والتخزين المؤقت وما إلى ذلك. من خلال وضع هذا المنطق في ديكورات منفصلة ، يمكنك جعل الكود أكثر إحكاما وتعبيرا ، بالإضافة إلى زيادة سهولة قراءته.
5. إعادة استخدام الكود
يتيح لك استخدام الديكور إعادة استخدام التعليمات البرمجية التي تنفذ عمليات نموذجية في أجزاء مختلفة من البرنامج. على سبيل المثال ، يمكنك إنشاء ديكور معالجة استثناء سيتم استخدامه في وظائف أو فئات مختلفة. إعادة استخدام التعليمات البرمجية باستخدام الديكور يبسط إلى حد كبير تطوير ودعم البرنامج ، وكذلك يحسن جودته وموثوقيته.
وبالتالي ، فإن استخدام الديكور في بايثون يسمح لك بتحسين بنية وبنية الكود ، وزيادة مرونته وقابليته للتوسعة ، وكذلك تبسيط قراءة وفهم البرنامج. الديكور هي أداة قوية تساعدك على إنشاء رمز أنيق وفعال.
أمثلة على استخدام الديكور في بايثون
توفر الديكور بيثون وسيلة مريحة لتغيير سلوك الوظائف والأساليب دون تغيير شفرة المصدر الخاصة بهم. إنها تسمح لك بإضافة وظائف إضافية إلى الوظائف والأساليب الحالية. دعونا نلقي نظرة على بعض الأمثلة على استخدام الديكور.
1. ديكور لقياس وقت تنفيذ الوظيفة:
"'بايثون
وقت الاستيراد
ديف تيمير_ديكور (فونك):
ديف المجمع (*أرغس ، * * كوارغس):
وقت البدء = الوقت.الوقت()
النتيجة = فونك (*أرغس ، * * كوارغس)
نهاية الوقت = الوقت.الوقت()
وقت التنفيذ = وقت الانتهاء-وقت البدء
طباعة (و " {{ظائف.__ الاسم__}: {وقت التنفيذ}}")
نتيجة الإرجاع
عودة المجمع
تضمين التغريدة
صفر حساب مجموع (ن):
مجموع = 0
لأني في النطاق (ن):
مجموع + = أنا
مبلغ الإرجاع
النتيجة = حساب المجموع (1000000)
«`
في هذا المثال ، أنشأنا الديكور 'ديكور_المؤقت_الذي يقيس وقت تنفيذ الدالة 'حساب_المجموع'. من خلال إضافة الديكور قبل تحديد الوظيفة ، نقوم بتطبيقها تلقائيا على هذه الوظيفة. ونتيجة لذلك ، سوف نحصل على وقت تنفيذ وظيفة 'حساب' في ثوان.
2. Декоратор для проверки аутентификации пользователя:
«`python
def login_required(func):
def wrapper(*args, **kwargs):
if user_is_authenticated():
return func(*args, **kwargs)
else:
return «Для доступа к этому ресурсу требуется аутентификация.»
return wrapper
@login_required
def access_resource():
return «Доступ предоставлен.»
result = access_resource()
«`
في هذا المثال ، يتم إنشاء الديكور 'تسجيل الدخول_المطلوب' ، والذي يتحقق مما إذا كان المستخدم مصادقة قبل منح حق الوصول إلى المورد. إذا تمت مصادقة المستخدم ، يتم تنفيذ وظيفة 'أسيس-ريسورس' ، وإلا يتم إرجاع رسالة حول المصادقة المطلوبة.
3. ديكور لتصحيح وظيفة:
"'بايثون
ديف ديبوجديكور(فونك):
def wrapper(*args, **kwargs):
print(f»Вызов функции {func.__name__} с аргументами {args} и {kwargs}»)
result = func(*args, **kwargs)
print(f»Результат выполнения функции: {result}»)
return result
return wrapper
@debug_decorator
def calculate_product(a, b):
return a * b
result = calculate_product(5, 10)
«`
В данном примере создан декоратор `debug_decorator`, который выводит информацию о вызове функции и результате ее выполнения. بعد إضافة الديكور '@ديبوج_ديكور '، عند استدعاء وظيفة 'حساب _ المنتج' ، وسوف نرى معلومات حول تنفيذه في وحدة التحكم.
وبالتالي ، فإن استخدام الديكور في بايثون يجعل من السهل إضافة وظائف إضافية إلى الوظائف والأساليب الحالية دون تغيير التعليمات البرمجية الخاصة بهم.
كيفية إنشاء الديكور الخاص بك في بايثون
الديكور هي أداة قوية في بيثون التي تسمح لك لتغيير سلوك وظائف أو فئات دون الحاجة إلى تغيير شفرة المصدر الخاصة بهم. بمساعدة المصممين ، يمكننا إضافة وظائف جديدة إلى الوظائف أو الفئات الموجودة ، أو لفها بمنطق إضافي ، أو تعديل قيم الإرجاع الخاصة بها.
لإنشاء مصمم الديكور الخاص بنا في بايثون ، يمكننا تحديد وظيفة تأخذ الوظيفة المزخرفة كوسيطة وإرجاع وظيفة جديدة ملفوفة في منطق إضافي. هنا مثال على ديكور بسيط:
"'بايثون
ديف بلدي ديكورتور(فونك):
ديف المجمع ():
طباعة ("قبل تنفيذ الوظيفة")
فونك()
طباعة(" بعد تنفيذ الوظيفة")
عودة المجمع
«`
في هذا المثال ، نحدد وظيفة الديكور 'بلدي ديكوراتور' ، الذي يأخذ وظيفة أخرى 'فونك' كوسيطة. داخل وظيفة الديكور ، نحدد وظيفة جديدة 'المجمع' ، الذي يضيف منطق إضافي قبل وبعد تنفيذ وظيفة `فونك`.
وظيفة عاد 'المجمع' يستبدل وظيفة الأصلي 'فونك' ويمكن أن يسمى بدلا من ذلك. لتطبيق ديكور على دالة معينة ، نستخدم بناء الجملة '@ديكوراتوري ' قبل تحديد الدالة:
"'بايثون
تضمين التغريدة
ديف وظيفتي ():
طباعة ("مرحبا ، العالم!»)
«`
الآن ، عند استدعاء وظيفة 'وظيفتي' ، سيتم تنفيذ منطق إضافي محدد داخل وظيفة الديكور. في هذه الحالة ، سيتم عرض الرسالة "قبل تنفيذ الوظيفة" قبل تنفيذ الوظيفة ، وبعد التنفيذ — "بعد تنفيذ الوظيفة".
لكن يمكن لمصممي الديكور قبول الحجج والعمل مع حجج الوظيفة التي يتم تزيينها. للقيام بذلك ، يمكننا تحديد وظيفة ديكور أكثر عمومية تأخذ الحجج وتمريرها إلى وظيفة غلاف داخلي:
"'بايثون
ديف ديكورتي مع أرغس (أرغ 1 ، أرغ 2):
ديف ديكور (فونك):
ديف المجمع (*أرغس ، * * كوارغس):
طباعة (و " حجج الديكور: {أرغ1} ، {أرغ2}")
طباعة ("قبل تنفيذ الوظيفة")
result = func(*args, **kwargs)
print(«After function execution»)
return result
return wrapper
return decorator
«`
В этом примере мы определяем функцию-декоратор `my_decorator_with_args`, которая принимает два аргумента `arg1` и `arg2`. تقوم وظيفة الديكور هذه بإرجاع وظيفة الغلاف الداخلي 'ديكور' ، والتي بدورها تقبل الوظيفة المزخرفة 'فونك' وتحدد وظيفة الغلاف 'المجمع' ، مما يضيف منطقا إضافيا.
وظيفة المجمع الداخلي 'المجمع' يقبل أي وسيطات ويمررها إلى وظيفة مزينة 'فونك' باستخدام بناء الجملة '* أرجس ' و '* * كوارغس'. في هذه الحالة ، يقوم المصمم بإخراج الوسيطات "أرغ1" و "أرغ2` ، كما يقوم بإخراج الرسائل" قبل تنفيذ الوظيفة "و"بعد تنفيذ الوظيفة".
تطبيق الديكور مع الحجج هو كما يلي:
"'بايثون
تضمين التغريدة ("أرغ1" ، "أرغ2")
ديف وظيفتي مع أرغس (أرغ 3 ، أرغ 4):
طباعة (و " وسيطات الدالة: {أرغ3} ، {أرغ4}")
«`
الآن ، عند استدعاء وظيفة 'وظيفتي' ، لن يتم إخراج المنطق الإضافي لمصمم الديكور فحسب ، بل سيتم أيضا إخراج قيم وسيطات الوظيفة المزخرفة. على سبيل المثال ، استدعاء"وظيفتي مع أرغس ("أرغ3" ، "أرغ4")" إخراج الرسائل "وسيطات الديكور: أرغ1 ، أرغ2"و" وسيطات الوظيفة: أرغ3 ، أرغ4".
وهكذا ، وخلق الديكور الخاصة بك في بيثون يسمح لك لتوسيع كبير في وظائف وظائف والطبقات دون تغيير شفرة المصدر الخاصة بهم. بل هو أداة مريحة لإضافة المنطق المشترك ، والشيكات ، وقطع الأشجار أو التخزين المؤقت ، مما يجعل رمز أكثر قابلية للقراءة وسهلة للحفاظ على.
سؤال وجواب