Quelques précisions sur les listes

Ce qui fait la flexibilité de Python c'est son typage dynamique https://docs.python.org/3.5/tutorial/datastructures.html

Typage Dynamique

Le typage d'une variable consiste à associer à sa variable symbolique un « type » de donnée, permet à l'ordinateur de savoir si celle-ci est de type numérique, textuel, etc, d'allouer en conséquence des zones de mémoire de dimension suffisantes pour stocker cette donnée, et éventuellement de vérifier que les manipulations programmées sur cette variable (opérations mathématiques, traitement de texte, etc.) sont cohérentes avec son type.

Le typage dynamique consiste à laisser l'ordinateur réaliser cette opération de typage « à la volée », lors de l'exécution du code, et donc de décharger le programmeur de la tâche contraignante de déclarer expressément, pour chaque variable qu'il introduit dans son code, son typage.


In [1]:
a=10
print('la valeur de a est {}, et son type est {} '.format(a,type(a)))


la valeur de a est 10, et son type est <class 'int'> 

In [2]:
a=10/2
print('la valeur de a est {}, et son type est {} '.format(a,type(a)))


la valeur de a est 5.0, et son type est <class 'float'> 

In [3]:
a=10//2
print('la valeur de a est {}, et son type est {} '.format(a,type(a)))


la valeur de a est 5, et son type est <class 'int'> 

Des exemples classiques de types dynamiques sont les list est les dict qui admettent des methodes dites "génériques".

Généricité

La programmation générique, consiste à définir des algorithmes identiques opérant sur des données de types différents.

"A programming paradigm whereby fundamental requirements on types are abstracted from across concrete examples of algorithms and data structures, and formalised as concepts, with generic functions implemented in terms of these concepts" Wikipedia


In [4]:
def Ajoute_dix(inputData):
    if isinstance(inputData, int):
        return inputData + 10
    elif isinstance(inputData, str):
        return int(inputData) + 10
    else:
        return 10

In [5]:
a=15
print("Le type de a est : {}".format(type(a)))
b=Ajoute_dix(a)
print("En applicant la fonction Ajoute_dix à (a) on obtient : {}".format(b))
print("Qui est de type : {}".format(type(b)))


Le type de a est : <class 'int'>
En applicant la fonction Ajoute_dix à (a) on obtient : 25
Qui est de type : <class 'int'>

In [6]:
a='15'
print("Le type de a est : {}".format(type(a)))
b=Ajoute_dix(a)
print("En applicant la fonction Ajoute_dix à (a) on obtient : {}".format(b))
print("Qui est de type : {}".format(type(b)))


Le type de a est : <class 'str'>
En applicant la fonction Ajoute_dix à (a) on obtient : 25
Qui est de type : <class 'int'>

In [7]:
L1=[3,1,4,0]
print("si on trie une liste d'entiers {}".format(L1))
L1.sort() #Cette methode est génerique
print("on obtient une liste triée {}".format(L1))


si on trie une liste d'entiers [3, 1, 4, 0]
on obtient une liste triée [0, 1, 3, 4]

In [8]:
L1=['3','1','4','0']
print("si on trie une liste de char {}".format(L1))
L1.sort() #Cette methode est génerique
print("on obtient une liste triée {}".format(L1))


si on trie une liste de char ['3', '1', '4', '0']
on obtient une liste triée ['0', '1', '3', '4']