Simplitatea programarii in Python, instructiunea "with"

Categorii: Programare

05-Apr-2018 15:16 - 106 vizionari

Am ajuns sa apreciez simplitatea limbajului Python.

Pana acum am fost incantat de viteza cu care poti schita si testa o solutie.

Doua exemple particulare de utilizare a instructiunii "with".

Masurarea timpului de executie a unei secvente de instructiuni:


#
# afiseaza diferenta de timp time.time() dintre momentul initial si cel final
#

class MyT(object):
    '''
        My time it class
        ex:
        with MyT('label'):
            ...
            some code
            ...
    '''
    def __init__(self, label=''):
        self.label = label
    def __enter__(self):
        self.t = time.time()
    def __exit__(self,exc_type, exc_val, exc_tb):
        print '{}: {:.4f} sec.'.format(self.label, time.time() - self.t)


#exemplu de utilizare:
with MyT('test o secunda'):
    time.sleep(1)


Inchiderea automata a sesiunii SQLAlchemy, chiar si in caz de eroare:


#
# necesita definirea functiei getSession(), functie care returneaza o sesiune SQLAlchemy
#

class MyS(object):
    '''
        My session class
        ex:
        with MyS() as session:
            ...
            session.query(...)
            session.add(...)
            session.delete(...)
            ...
    '''
    def __init__(self):
        self.session = None
    def __enter__(self):
        self.session = getSession()
        return self.session
    def __exit__(self,exc_type, exc_val, exc_tb):
        if self.session:
            self.session.commit()
            self.session.close()

#exemplu de utilizare:
with MyS() as session:
    searchterm = '%{}%'.format(self.components.filtru.text)
    allDocs = session.query(Documente).filter(Documente.titlu.like(searchterm))\
        .order_by(Documente.dataora_modificat.asc()).all()
    ...


Programarea este o arta, iar codul este poezie!



Ultimele pagini: RSS

Alte adrese de Internet

Categorii

Istoric



Contorizari incepand cu 9 iunie 2014:
Flag Counter

Atentie: Continutul acestui server reprezinta ideile mele si acestea pot fi gresite.