Vue d’ensemble

Variables et assignement

Python est un langage dynamiquement typé, les variables n’ont pas besoin d’être déclarées, et leur type peut changer au cours de l’exécution.

python: a = 3
python: type(a)
<type 'int'>
python: a = '3'
python: type(a)
<type 'str'>
python: a
'3'
python: int(a)
3

Syntaxe

L’indentation en Python a une valeur syntaxique : elle sert à délimter les blocs. Toutes les lignes d’un même bloc doivent être précédées du même nombre d’espaces blancs ; en général on conseille d’utiliser 4 espaces blancs.

Voici un exemple de bloc conditionnel mettant en évidence cette syntaxe.

if a == 0:
    print 'a vaut 0'
elif a > 0:
    print('a est positif')
    print('il vaut : ', a)
else:
    print('a est négatif')
print 'encore des questions sur a?'

Structures de contrôle

Source : https://docs.python.org/3.5/tutorial/controlflow.html

if... else

La seule construction conditionnelle existante en Python est if... elif... else.... Toutes les branches sont optionnelles, à l’exception du if, il peut y avoir un nombre quelconque de elif, mais un seul else à la fin.

if a == b == c:
    print('égaux')
elif a <= b <= c  or  c <= b <= a:
    print 'b au milieu'
elif b <= a <= c  or  c <= a <= b:
    print('a au milieu')
else:
    print('c au milieu')

Boucle for... in

Fondamentalement, il existe deux types de boucles en Python. La plus courante est la for... in qui permet de parcourir les éléments d’un itérable.

for i in range(10):
    print(i)

La fonction range

La boucle for est souvent utilisée en conjonction avec la fonction range, dont la syntaxe générale est :

range(start, end, step)

Ainsi appelée, la fonction génère la liste des entiers entre start (inclus) et end (non inclus) avec pas de step :

python: range(0, 10, 2)
[0, 2, 4, 6, 8]

Les deux autres syntaxes admissibles sont range(start, end) (pas égal à 1) et range(end) (début égal à 0).

Note : À partir de Python 3.x, range ne renvoie plus une liste, mais un générateur. La différence réside exclusivement dans l’utilisation de la mémoire, beaucoup plus efficace avec la 3.x. Le même comportement est réalisé par la fonction xrange en Python 2.x.

Boucle while

La deuxième boucle est la while.

a = 0
while a < 10:
    a += 1
    print(a)

Pas étonnant qu’il soit alors beaucoup plus facile d’écrire une boucle infinie :

while True:
    print('boucle toujours')

Interrompre les boucles: break, continue et return

L’instruction break sort de la boucle sans vérifier la condition :

for i in range(10):
    print(i)
    if i > 2:
        break

L’instruction continue passe à l’itération suivante en sautant le reste du corps :

for i in range(10):
    if i % 2 == 0:
        continue
    print(i)

Et le return sort immédiatement de toute boucle et de la fonction qui le contient.

Listes

Source : https://docs.python.org/3/tutorial/datastructures.html

L’un des objets les plus utilisés en Python, ce sont les listes. On déclare une liste avec les crochets [], et on accède à ses éléments comme on accède aux éléments d’un tableau en C :

python: l = ['nom','prenom',35, 'a', True]
python: l
['nom','prenom',35, 'a', True]
python: l[0]
'nom'
python: l[4]
True
python: l[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Les indices négatifs accèdent aux éléments à partir du dernier :

python: l[-1]
True
python: l[-4]
'prenom'
python: l[-6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Il est aussi possible d’obtenir les sous-listes d’une liste. On parle de slicing. L’expression l[start:end:step] donne la sous-liste de l qui démarre à l’élément start (inclus), se termine à l’élément end (exclus) et saute tous les step éléments.

python: l = range(10)
python: l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
python: l[0:4]
[0, 1, 2, 3]
python: l[0:4:2]
[0, 2]
python: l[2:]
[2, 3, 4, 5, 6, 7, 8, 9]
python: l[:-3]
[0, 1, 2, 3, 4, 5, 6]
python: l[0::3]
[0, 3, 6, 9]
python: l[4:-2]
[4, 5, 6, 7]
python: l[::]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
python: l[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

La syntaxe [:] est un raccourci courant pour copier une liste :

python: l[:] == l
True
python: l[:] is l
False

Compréhensions

Python offre une syntaxe pour la création des listes qui devrait être familière aux mathématiciens. C’est l’écriture en compréhension bien connue dans la théorie des ensembles. Elle permet entre autre, de réduire l’écriture de loupes. C’est un héritage du langage Lisp appelé compréhensions de listes :

python: [a + 0.5 for a in range(10)]
[0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]

ce qui est sémantiquement équivalent à

l = []
for a in range(10):
    l.append(a + 0.5)

On peut ajouter un nombre arbitraire de for et de if (sans else)/ opérations logiques dans une compréhension, ils seront déroulés dans l’ordre :

[x*y for x in range(10) for y in range(x) if (x + y) % 2 == 0]

(les retours à la ligne sont optionnels) est équivalent à

l = []
for x in range(10):
    for y in range(x):
        if (x + y) % 2 == 0:
            l.append(x*y)

Fonctions

Source : https://docs.python.org/3/tutorial/controlflow.html

Les fonctions Python sont définies par le mot clef def. Elles peuvent prendre un nombre arbitraire de paramètres, et renvoyent une valeur à l’aide du mot clef return. Toute fonction renvoye une valeur, les fonctions qui n’ont pas de return renvoient la valeur spéciale None.

def max(x, y):
    if x > y:
        return x
    else:
        return y

Certains paramètres peuvent prendre des valeurs par défaut. Si un paramètre prend une valeur par défaut, tous ceux qui le suivent doivent aussi en prendre.

python: def test(a, b, c=0, d=False):
.......    return a, b, c, d

python: test(1, 2)
(1, 2, 0, False)
python: test(1, 2, 3)
(1, 2, 3, False)
python: test(1, 2, 3, 4)
(1, 2, 3, 4)
python: test(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: test() takes at least 2 arguments (1 given)

Les paramètres d’une fonction peuvent être assignés hors ordre avec la notation paramètre=valeur :

python: test(b=1, a=2)
(2, 1, 0, False)
python: test(1, 2, d=4)
(1, 2, 0, 4)

Python fournit deux opérateurs unaires pour transformer des objets en paramètres d’une fonction. L’opérateur * transforme une liste ou un tuple, tandis que l’opérateur ** transforme un dictionnaire :

python: l = range(4)
python: test(*a)
(0, 1, 2, 3)
python: d = { 'a' : 3, 'b' : 5, 'd' : 1 }
python: test(**d)
(3, 5, 0, 1)

Python: un survol rapide

Retour