القائمة الرئيسية

الصفحات

مكررات الديكور ومولدات بايثون Les décorateurs Les itérateurs et les générateurs python

مكررات الديكور ومولدات بايثون 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

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



الصفحة الرئيسية >> التعبيرات العادية في بيثون Les expressions régulières en python python       

تعليقات