Py: Modules interessants
Py: Modules interessants

Directory

logging

inspect et introspection

import inspect

Permet de retourner sous forme de string des infos d’introspection. Par exemple pour tracer les appels d’une fonction:

import inspect

def cochon():
    print(inspect.stack()[0][3]) # cochon
    print(inspect.stack()[1][3]) # poule
    print(inspect.stack()[2][3]) # vache
    print(inspect.stack()[3][3]) # <module>

def poule():
    cochon()

def vache():
    poule()


vache()

output:

cochon
poule
vache
<module>

La première valeur entre [] définit le niveau d’introspection. 0 est la fonction actuelle, 1, celle qui apelle,… La seconde valeur entre [], le type d’information.

  • [0][0] $ \Rightarrow $ path du fichier
  • [x][1] $ \Rightarrow $ adresse en mémoire du l’objet
  • [x][2] $ \Rightarrow $ numéro de la ligne du call
  • [x][3] $ \Rightarrow $ nom de la fonction
  • [x][4] $ \Rightarrow $ string contenant le text de la ligne

** Le module comporte plein d’autres fonctions interessantes !**

Nous pouvons retourner le nom de la classe courante avec self.__class__.__name__.

Dans le cadre d’un héritage, cela retourne le nom de la classe qui hérite:

import inspect

class Parent(object):
    def __init__(self, a=0):
        self.a = a
    
    def debug(self):
        print(inspect.stack()[1][3])
        print(self.__class__.__name__)


class Enfant(Parent):
    
    def poule(self):
        self.debug()


e1 = Enfant()
e1.poule()

output:

poule
Enfant

Random

randint

random.randint(a, b)

Sort entier au hasard entre a et b

>>> import random
>>> print(random.randint(1, 5))
4

Si nous avons uniquement besoin d’une plus valeur:

>>> print(random.randint(1, 5)*100)
200

Plus large spectre:

>>> for i in range(10):
...     print(random.randint(1,10000), end=', ')
4937, 248, 65, 5924, 7392, 2950, 4, 1577, 8702, 7708

choice

Sort un élément d’une séquence:

>>> print(random.choice("ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
G

Equivalent du popitem() des dictionnaire:

>>> l = ['a', 'b', 'c', 'd']
>>> r = random.choice(l)
>>> l.remove(b)
>>> print(l, b)
['a', 'b', 'd'] c

shuffle

>>> l = [i for i in range(10)]
>>> print(l)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> random.shuffle(l)
>>> print(l)
[4, 1, 7, 5, 6, 0, 8, 3, 9, 2]

randrange

randrange(start, stop=None, step=1, _int=int)

Sort un element au hasard dans range(start, stop[, step]) ** A la différence de randint() nous pouvons ici définir une borne de départ uniquement.**