Skip to content

Instantly share code, notes, and snippets.

@mguijarr
Last active September 20, 2018 23:35
Show Gist options
  • Save mguijarr/4d671a5f0246c370937c120b8e3c40b9 to your computer and use it in GitHub Desktop.
Save mguijarr/4d671a5f0246c370937c120b8e3c40b9 to your computer and use it in GitHub Desktop.
Corrigé test Python remise à niveau LP
  1. Guido Van Rossum

  2. Interprété, avec un typage fort, avec un typage dynamique, orienté objet

  3. Pypy, Jython, IronPython, Brython, CPython...

  4. None

Les fonctions et les modules créent des espaces de noms. Les variables ont une portée limitée à l'espace de nom dans lequel elles sont assignées (ou créées). Les espaces de noms peuvent être imbriqués (par exemple une fonction dans une fonction, ou bien une fonction dans une classe ou dans un module). Lorsque l'on recherche une variable qui n'existe pas dans l'espace de nom courant, c'est l'espace de nom du dessus qui est recherché, et ainsi de suite jusqu'à l'espace de nom des built-ins (celui de plus haut niveau).

Attention à ne pas confondre les espaces de noms et les blocs de code (repérés par l'indentation).

def somme(*n):
    return sum(n)
  1. try: except RuntimeError: <code de gestion d'exception>

def somme(*n):
    if not all(type(x) in (int, float) for x in n):
        raise TypeError("La fonction ne prend que des entiers ou des float")
    return sum(n)

En suivant le principe 'better to ask forgiveness than permission', l'approche optimiste consiste à rattraper des exceptions (à l'aide de try...except) plutôt que de faire de nombreux tests ("if" etc.) de vérification pour la validité d'une condition ou d'un bloc de code. L'idée est que la plupart du temps, tout va bien se passer il n'y aura pas d'exception. Le code est plus léger à écrire et à relire.

La fonction breakpoint() insère un point d'arrêt pour le déboggage à l'endroit du code où se trouve l'appel de la fonction.

Attention: ne pas confondre avec le mot-clef "break" pour sortir d'une boucle !

  1. La taille maximale d'un entier en Python n'est pas limitée, elle dépend de la mémoire disponible.

Un objet immutable est un objet dont l'état ne peut plus être changé après sa création, il ne peut pas être modifié. C'est le cas des chaînes de caractères Python, par exemple.

Attention: si s="hello", l'opération s+="!" fonctionne tout de même ; pourquoi ? En réalité s+="!" signifie s=s+"!" soit s="hello"+"!", s="hello!", c'est-à-dire que la variable "s" est réassignée avec une nouvelle valeur et non pas que la chaîne "s" aurait muté.

  1. immutable, peut contenir des caractères unicode

Un 'dict' Python est une structure de données représentant un ensemble de couples (clef, valeur). Cela correspond à une "map" dans d'autres langages. Depuis Python 3.6 le dict conserve l'ordre d'insertion quand on parcourt ses éléments (itération). Les clefs ou les valeurs peuvent avoir n'importe quelle valeur de variable Python. Toutefois les clefs doivent être "hashable", c'est-à-dire disposant d'une méthode hash() renvoyant la même valeur tout au long de la durée de vie de l'objet. Tous les objets Python immutable sont hashables.

Le code est écrit en Python 3.5: l'ordre du dictionnaire "nb_hab_villes" n'est pas préservé lors du parcours avec la première boucle "for", donc le programme mélange le nom des villes et la population avec le nom des habitants (par exemple, Paris serait associé avec New-yorkais...). D'autre part, les f-strings n'existent pas en Python 3.5: le print à la fin ne fonctionne pas.

"".join(chr(i) for i in range(65,91))

emails_not_in_new = { email for email in open("old.txt") } - { x.split(',')[0] for x in open("new.csv") }

Une fois un module Python chargé, tout import du même module renvoie le même objet depuis le dictionnaire de tous les modules chargés "sys.modules"

def fibo_gen(): a, b = 0, 1 while True: yield a a, b = b, a + b

  1. La fonction "open" est un context manager des built-ins Python.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment