-
Guido Van Rossum
-
Interprété, avec un typage fort, avec un typage dynamique, orienté objet
-
Pypy, Jython, IronPython, Brython, CPython...
-
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)
-
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 !
-
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é.
-
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
- La fonction "open" est un context manager des built-ins Python.