DY

DelahayeYourself

modules / LP Web Dynamique /

TP02: Quelques détails

Encodage des fichiers sources et UTF-8

Attention il s'agissait de l'utilisation faites en Python 2, Python3 est nativement en UTF-8. Ceci est laissé à titre d'information.

Pour pouvoir utiliser des caractères « spéciaux » (accents notamment) dans vos programmes (même dans les commentaires), vous devez dire à Python, de manière explicite, que vous souhaitez utiliser l'encodage de caractères UTF-8.

Pour cela, ajoutez simplement, systématiquement en haut de tous vos fichiers, la ligne suivante :

# coding: utf8

Une fonction main ?

main() n'existe pas en Python, comme on peut le trouver en C par exemple. Ce n'est pas un problème en soi et ça ne vous empêchera sûrement pas de dormir.

Il y a néanmoins un cas de figure où le fait de ne pas avoir ce genre de fonction peut être problématique : quand on inclut un module dans un autre, Python réalise un import de tout le contenu du module (logique !).

Le problème, c'est que si on y place des instructions à l'extérieur de toute fonction ou méthode, elles seront exécutées systématiquement, même lors de l'inclusion du module !

C'est ici qu'intervient le test if name == 'main':

Fichier module.py:

def say_hello(name):
    return 'Hello %s !' % name


print say_hello('Ben Kenobi')

Fichier myprog.py:

import module


print module.say_hello('Luke Skywalker')

Si vous exécutez le programme myprog.py vous constaterez que la fonction say_hello est appellée deux fois, une fois dans notre programme principale et une autre fois au sein de notre module. Pour corriger ce problème:

Fichier module.py:

def say_hello(name):
    return 'Hello %s !' % name


if __name__ == '__main__':
    print say_hello('Ben Kenobi')

Formattage des strings

Que ce soit en Python ou dans n'importe quel autres langage de programmation pour créer/formatter des chaînes de caractères on n'utilise pas d'opérateur de concaténation ! (C'est moche et illisible ..)

name = 'Mark Hamill'
movie = 'Star Wars'
date_begin = '1977'
date_end = 'today'

print ('{name} played in {movie} from {begin} à {end}.'
       .format(name=name, movie=movie,
               begin=date_begin, end=date_end))

Quelques modules à connaître

Python est un langage très complet, qui inclut en standard beaucoup de modules permettant de résoudre bon nombre des problèmes auxquels le programmeur doit faire face dans la vie quotidienne.

Parmi ces modules, quelques-uns sont incontournables :