برنامج Python Decorator التعليمي: كيفية استخدام الديكور في Python



تتناول هذه المقالة مفهوم المصمم في لغة بيثون مع برنامج تعليمي مفصل يتضمن أمثلة مختلفة من الحياة الواقعية مثل الديكورات الفاخرة ، إلخ.

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

ما هي الوظائف في بايثون؟

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





  • الصف الأول شاء

  • الوظائف الداخلية



كائنات من الدرجة الأولى

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

دعنا نلقي نظرة على مثال لفهم كيفية عمله.

def func1 (الاسم): return f'Hello {name} 'def func2 (name): return f' {name} ، كيف حالك؟ ' def func3 (func4): إرجاع func4 ('عزيزي المتعلم') طباعة (func3 (func1)) طباعة (func3 (func2))
 انتاج: مرحبا عزيزي المتعلم عزيزي المتعلم ، كيف حالك؟

في المثال أعلاه ، استخدمنا الامتداد للحصول على الاسم ومرر func1 و func2 كحجة في func3.



الوظائف الداخلية

في بايثون ، من الممكن تحديد وظائف داخل دالة. هذه الوظيفة تسمى وظيفة داخلية. هذا مثال يوضح كيف يمكننا استخدام الدوال الداخلية في بايثون.

def func (): print ('first child') def func1 (): print ('first child function') def func2 (): print ('second child function') func1 () func2 () func ()
 انتاج: الوظيفة الأولى وظيفة الطفل الأول وظيفة الطفل الثاني

في البرنامج أعلاه ، لا يهم كيف يتم الإعلان عن الوظائف التابعة. يعتمد الإخراج على كيفية تنفيذ الوظائف التابعة. يتم تحديد نطاقها محليًا باستخدام func () بحيث لا يمكن استدعاؤها بشكل منفصل.

إذا اتصلت بهم بشكل منفصل ، فستتلقى خطأ لأنه يتم تخزينهم على هيئة المتغيرات داخل func () ويمكن استدعاؤها فقط إذا تم استدعاء func ().

إرجاع دالة من وظيفة

ما هو الإجراء في SQL

من الممكن إرجاع دالة باستخدام دالة أخرى. ألق نظرة على المثال أدناه لفهم ذلك.

def func (n): def func1 (): إرجاع 'edureka' def func2 (): إرجاع 'python' إذا كان n == 1: إرجاع func1 else: return func2 a = func (1) b = func (2) print ( أ () طباعة (ب ())
 انتاج: إدوريكا بيثون

ديكورات في بايثون

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

في الإدراك المتأخر ، يلتف المصمم بوظيفة ويعدل سلوكها. دعونا نلقي نظرة على مثال بسيط لفهم كيف يمكننا العمل مع الديكور في بيثون.

def function1 (function): def wrapper (): print ('hello') function () print ('welcome to python edureka') عودة غلاف def function2 (): print ('Pythonista') function2 = function1 (function2) function2 ( )
 انتاج: مرحبًا Pythonista مرحبًا بك في Python edureka

لجعل الأمور أسهل قليلاً على المبرمجين ، لدينا سكر نحوي مع زخارف بيثون. ألق نظرة على المثال أدناه لفهم كيفية عمله.

def function1 (function): def wrapper (): print ('hello') function () print ('how are you؟') عودة مجمعة @ function1 def function2 (): print ('pythonista') function2 ()
 انتاج: مرحبا بيثونيستا كيف حالك

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

استخدام الزخرفة بالحجج

عندما يكون لديك دالة مع وسيطات ، يصبح الأمر أكثر صعوبة بالنسبة لوظيفة الديكور لأنها تحتاج أيضًا إلى وسيطات في الإعلان. لمعالجة هذا يمكننا استخدام * args و ** kwargs في وظيفة الغلاف الداخلي. ألق نظرة على المثال التالي لفهم هذا.

def function1 (function): def wrapper (* args، ** kwargs): print ('hello') function (* args، ** kwargs) print ('welcome to edureka') عودة الغلاف @ function1 def function2 (name): طباعة (f '{name}') function2 ('pythonista')
 انتاج: مرحبًا Pythonista مرحبًا بكم في edureka

إرجاع القيم من وظائف مزينة

دعنا نلقي نظرة على مثال لنرى كيف يمكننا إرجاع قيمة من دالة مزخرفة.

def function1 (function): def wrapper (* args، ** kwargs): function (* args، ** kwargs) print ('it working') return wrapper @ function1 def function2 (name): print (f '{name} ') function2 (' python ')
 انتاج: الثعبان عملت

تأكد من إعادة وظيفة المجمّع باستخدام الوسائط لتجنب أي أخطاء.

ديكورات خيالية في بايثون

الآن بعد أن عرفنا كيف يعمل المصممون في Python ، دعونا نستكشف ميزات معقدة إلى حد ما بمساعدة بعض الأمثلة.

فئة الديكور

هناك طريقتان لتزيين فصل دراسي بلغة بيثون. الأول هو المكان الذي يمكنك فيه تزيين الأساليب داخل الفصل الدراسي ، فهناك ديكورات مضمنة مثلclassmethod وstaticmethod وproperty في بيثون. يحددclassmethod وstaticmethod عمليات داخل فئة غير متصلة بأي مثيل آخر للفئة. يتم استخدامproperty عادةً لتخصيص أدوات تحديد ومحددات سمة الفئة. دعنا نلقي نظرة على مثال لفهم هذا.

class Square: def __init __ (self، side): self._side = sideproperty def side (self): return self._side @ side.setter def side (self، value): if value & gt = 0: self._side = value else: print ('error')property def area (self): return self._side ** 2classmethod def unit_square (cls): return cls (1) s = Square (5) print (s.side) print (s.area)
 انتاج: 5 25

طريقة أخرى لتزيين الفصل هي تزيين الفصل بأكمله. دعونا نأخذ مثالا لفهم هذا.

من dataclasses استيراد فئة dataclass @ بطاقات فئة dataclass: الرتبة: str Suit: str

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

فئة سينجلتون

الصف الفردي له مثيل واحد فقط. هناك الكثير من الأحرف الفردية في Python بما في ذلك True ، و None ، إلخ. دعونا نلقي نظرة على مثال لفهم هذا بشكل أفضل.

استيراد functools def singleton (cls): @ functools.wraps (cls) def wrapper (* args، ** kwargs): if not wrapper.instance: wrapper.instance = cls (* args، ** kwargs) .instance = بلا غلاف إرجاع @ singleton الفئة الأولى: تمرير أولًا = واحد () ثانية = واحد () طباعة (الأول هو الثاني)
 انتاج: صحيح

يؤدي استخدام 'is' إلى إرجاع 'صحيح' فقط للكائنات التي هي نفس الحالة. يستخدم المثال أعلاه نفس النهج مثل أي مصمم آخر وظيفة. الاختلاف الوحيد هو أننا استخدمنا cls بدلاً من الوظيفة. أيضا ، الأول والثاني هما نفس المثال بالضبط.

ديكورات التعشيش

يمكنك استخدام أدوات تزيين متعددة عن طريق تكديسها فوق بعضها البعض. دعونا نأخذ مثالا لفهم كيف يعمل هذا.

@ function1 @ function2 def function (name): print (f '{name}')

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

ما هو التجريد في ++ C

الحجج في الديكور

من المفيد دائمًا تمرير الحجج في المصمم. دعونا نتأمل المثال التالي.

استيراد functools def كرر (عدد): def decorator_repeat (func): @ functools.wraps (func) def المجمع (* args ، ** kwargs): for _ in range (num): value = func (* args، ** kwargs ) عودة مغلف القيمة المرجعة إرجاع decorator_repeatrepeat (عدد = 4) وظيفة def (name): print (f '{name}') function ('python')
 انتاج: بيثون بيثون بيثون بيثون

يقودنا هذا إلى نهاية هذه المقالة حيث تعلمنا كيف يمكننا استخدام Decorator في Python مع أمثلة. أتمنى أن تكون واضحًا بشأن كل ما تمت مشاركته معك في هذا البرنامج التعليمي للديكور بايثون

إذا وجدت هذه المقالة حول 'Python Decorator Tutorial' ذات الصلة ، فراجع ملف شركة تعليمية موثوقة عبر الإنترنت مع شبكة تضم أكثر من 250000 متعلم راضٍ منتشرة في جميع أنحاء العالم.

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

إذا صادفت أي أسئلة ، فلا تتردد في طرح جميع أسئلتك في قسم التعليقات في 'دروس تزيين بايثون' وسيسعد فريقنا بالإجابة.