Skip to article frontmatterSkip to article content

Python est fortement typé (eh oui!)

ce qu’on a pu remarquer d’après le notebook précédent

déclaration de variable

en fait ce qui se passe avec Python c’est que

variables non typées

les objets sont tous typés

par contre:

# illustration

a = 10
type(a)
int
b = "une chaine"
type(b)
str
import math
type(math)
module
def hello(n):
    print(f"Hello {n}")
type(hello)
function
class Person:
    def __init__(self, name):
        self.name = name

# le type d'une classe, c'est quoi donc ?
type(Person)
type
# (très) avancé: à un moment ça s'arrête bien sûr
type(type) is type
True

objets mutables ou pas

%load_ext ipythontutor

non mutable (par ex, un entier)

le type int n’est pas mutable (immutable donc)
qu’est-ce que ça signifie ?
une fois l’objet créé, on ne peut plus le modifier

%%ipythontutor heapPrimitives=true

a = b = 1
a += 1
# le même objet ?
print(a is b)
Loading...

que se passe-t-il sur cet exemple ?

mutable (par ex: liste)

le type list par contre est mutable; ça veut dire que, par exemple, on peut ajouter une entrée à la fin d’une liste avec la méthode append

du coup on peut faire ceci

%%ipythontutor heapPrimitives=true

a = b = [1]
a.append(2)
print(b)
print(a is b)
Loading...

intermédiaire: remarquez qu’on n’est pas obligé de faire comme ça, dans la version ci-dessous a est bien allongée, mais on ne modifie pas b

%%ipythontutor heapPrimitives=true height=380

# remarquez la différence
# avec l'exemple précédent

a = b = [1]
a = a + [2]
print(b)
print(a is b)
Loading...

les type hints

# le type hint est ici
#     ↓↓↓↓↓↓↓↓↓↓↓
names : list[str] = ["Alice", "Bob", "Charlie"]

# et ici           ↓↓↓↓↓  ↓↓↓↓↓↓↓
def hello_name(name: str) -> None:
    print(f"hello {name}")
# avec ce code on peut toujours faire
hello_name("paul")
hello paul
# mais aussi !
hello_name(100)
hello 100

que retenir ?

et aussi à propos des type hints