مكررات الديكور ومولدات بايثون Les décorateurs Les itérateurs et les générateurs python
الديكور هو وظيفة تعدل سلوك
الوظائف الأخرى .
الديكور مفيد عندما تريد إضافة نفس الرمز إلى العديد من
الوظائف .
إنشاء ديكور بايثون Créer un
décorateur python
لنأخذ مثال وظيفة لها الحق في التنفيذ فقط إذا كان
المستخدم " شجرة زيتون ".
# coding: utf - 8
user = " oliviers "
def mon__decorateur( fonction ):
def autre__fonction( ):
print " action refusé "
if user <> " oliviers ":
return autre__fonction
return fonction
@mon__decorateur
def do__that ( ) :
print "on va Executer les
instructions "
>>> do__that()
On va Executer les instructions
دعنا نغير قيمة المستخدم المتغير .
user = "mimouni-rachid "
دعنا نشغل الوظيفة مرة أخرىdo__that .
>>> do__that()
action refusé
فويلا ، تمكنا من حظر تنفيذ الوظيفة do__that إذا لم يكن
المستخدم "شجرة زيتون" .
ضع المعلمات في الاعتبار Prendre en
compte les paramètres
يمكن للديكور أن يأخذ في الاعتبار معلمات وظيفتنا
الأولية بهذه الطريقة :
# coding: utf - 8
def mon__decorateur(fonction ) :
def autre__fonction( *param ,
**param2 ):
print " avant l’action ____________________
"
fonction( *param , **param2 )
print " après l’action _______________________"
return autre__fonction
@mon__decorateur
def do__that(w):
print " on va Executer les
instructions %s" % w "
Exécutons la fonction do__that .
>>> do__that("delete")
avant l’action ____________________________
on va Executer les instructions delete
après l’action _____________________________
العديد من الديكور Plusieurs décorateurs
من الواضح أنه من الممكن تعيين العديد من مصممي الديكور
لوظيفة :
@decorateur2
@decorateur3
def ma__fonction():
المكررات ومولدات بايثون Les itérateurs et les générateurs
python
ما هو المكرر؟ Un itérateur c'est quoi?
المكرر هو نوع من المؤشرات
التي تتمثل مهمتها في التحرك في سلسلة من الكائنات. يسمح لك المكرر بتصفح كل كائن
في تسلسل دون القلق بشأن البنية الأساسية.
لماذا تستخدم مكررا بدلا من قائمة ؟ Pourquoi utiliser un itérateur plutôt qu'une liste?
يجلب المكرر مستوى أعلى من التجريد ، أي نضيف طبقة
إضافية من التعليمات البرمجية لتنفيذ إجراء. إذا اضطررنا يوما ما إلى تغيير عناصر
الكود - مثال على تحديث lib أو تغيير قاعدة البيانات على سبيل المثال - فلن نحتاج
إلى تغيير كل التعليمات البرمجية الخاصة بنا لأن طبقة التجريد هذه بالإضافة إلى
ذلك تسمح بتغيير ما هو ضروري فقط على مستوى الفصل ولم يعد الكود. والجليد على
macdo ، المكرر هو كائن غير مكلف في استخدام الذاكرة .
إنشاء المكرر الخاص بك Créer son propre itérateur
القائمة هي مكرر :
>>> liste = [ 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 ]
>>> for x in liste :
. . . print( x )
. . .
10
20
30
40
50
60
70
80
90
100
دعنا ننشئ فئة التكرار الخاصة بنا:
# coding: utf - 8
class MonIter( ):
current = 0
def _init_( self, stop ) :
self.stop = stop
def _iter_(self) :
return self
def next(self) :
self.current + = 1
if self.current > self.stop
:
raise StopIteration
if self.current == 5 :
print(" déja 5 eme
tour ? ")
return self.current
يمكننا الآن أن نختتم هذا العنصر :
>>> for i in MonIter( 10 ) :
. . . print( i )
. . .
10
20
30
40
Déj a 5eme tour ?
50
60
70
80
90
100
مولدات Les générateurs
تسهل المولدات إنشاء مكررات .
لنقم بإنشاء مولد أساسي :
# coding: utf – 8
def generateur():
yield "R"
yield "R"
yield "H"
ثم دعنا ننشئ مكررا :
>>> i = generateur()
>>> for W in i :
... print(W)
...
R
A
H
إذن ما هي هذه الفوضى التي لا نفهمها. بادئ ذي بدء ،
نتذكر أن هناك كلمة رئيسية جديدة ، تم إنشاؤها خصيصا للمولدات: العائد . تشبه هذه
الكلمة الأساسية إلى حد ما عودة الوظائف باستثناء أنها لا تعني نهاية تنفيذ الوظيفة ولكن
وقفة وعند التكرار التالي ستبحث الوظيفة عن العائد التالي .
دعنا ننشئ نفس المكرر كما في الفصل السابق:
# coding: utf - 8
def generateur( M ):
for i in range( M ):
if i == 5 :
print (" déja 5 eme
tour ? ")
yield i+1
دعنا الآن نختتم على التكرار:
>>> i = generateur( 10 )
>>> for W in i:
. . . print(W)
. . .
10
20
30
40
50
déja 5 eme tour ?
60
70
80
90
100
هكدا نصل إلى نفس النتيجة مع عدد أقل بكثير من التعليمات البرمجية .
تعليقات
إرسال تعليق