Modules Python

Un module Python est un fichier Python se terminant par .py, qui contient des définitions d'objets Python et des instructions Python.

Les modules vous permettent d'organiser logiquement les sections de votre code Python.

Affecter du code associé à un module rend votre code plus utilisable et plus facile à comprendre.

Les modules peuvent définir des fonctions, des classes et des variables, et peuvent également contenir du code exécutable.

Exemple

Voici un simple module support.py :

module support.py :

def print_func( par ): print "Bonjour : ", par return

instruction d'import

Importation de modules

Une fois qu'un module est défini, nous pouvons utiliser l'instruction import pour importer le module. La syntaxe est la suivante :

import module1[, module2[,... moduleN]]

Par exemple, pour référencer le module math, vous pouvez utiliser ce qui suit au tout début du fichier :import mathpour l'importer. Lorsque vous appelez des fonctions du module math, vous devez le référencer comme ceci :

Module name.function name

Lorsque l'interpréteur rencontre une instruction import, le module sera importé s'il se trouve dans le chemin de recherche actuel.

Le chemin de recherche est une liste de tous les répertoires que l'interpréteur parcourra dans l'ordre. Si vous voulez importer le module support.py, vous devez placer la commande en haut du script :

Code du fichier test.py :

#!/usr/bin/python # -*- coding: UTF-8 -*- # importer le module import support # Vous pouvez maintenant appeler les fonctions incluses dans le module support.print_func("Exemple")

La sortie de l'exemple ci-dessus est :

Hello : Example

Un module n'est importé qu'une seule fois, quel que soit le nombre de fois où vous exécutez import. Cela empêche le module importé d'être exécuté encore et encore.



instruction from…import

L'instruction from de Python vous permet d'importer une partie spécifique d'un module dans l'espace de noms actuel. La syntaxe est la suivante :

from modname import name1[, name2[, ... nameN]]

Par exemple, pour importer la fonction fibonacci depuis le module fib, utilisez l'instruction suivante :

from fib import fibonacci

Cette instruction n'importe pas l'intégralité du module fib dans l'espace de noms courant ; elle importe uniquement la fonction fibonacci depuis fib dans la table des symboles globaux du module qui exécute cette instruction.



instruction from…import *

Il est également possible d'importer tout le contenu d'un module dans l'espace de noms courant. Utilisez simplement la déclaration suivante :

from modname import *

Cela fournit un moyen simple d'importer tous les éléments d'un module. Cependant, cette déclaration ne doit pas être surutilisée.

Par exemple, si nous voulons importer tout le contenu du module math d'un coup, l'instruction est la suivante :

from math import *

Chemin de recherche

Lorsque vous importez un module, l'interpréteur Python recherche l'emplacement du module dans l'ordre suivant :

  • 1. Répertoire courant
  • 2. S'il n'est pas dans le répertoire courant, Python recherche dans chaque répertoire listé dans la variable shell PYTHONPATH.
  • 3. S'il est introuvable, Python vérifie le chemin par défaut. Sous UNIX, le chemin par défaut est généralement /usr/local/lib/python/.

Le chemin de recherche des modules est stocké dans la variable sys.path du module système. Cette variable contient le répertoire courant, PYTHONPATH et les répertoires par défaut déterminés par le processus d'installation.



Variable PYTHONPATH

En tant que variable d'environnement, PYTHONPATH se compose de nombreux répertoires contenus dans une liste. La syntaxe de PYTHONPATH est la même que celle de la variable shell PATH.

Sur les systèmes Windows, un PYTHONPATH typique est le suivant :

set PYTHONPATH=c:\python27\lib;

Sur les systèmes UNIX, un PYTHONPATH typique est le suivant :

set PYTHONPATH=/usr/local/lib/python


Espaces de noms et portée

Une variable est un nom (identifiant) qui possède un objet correspondant. Un espace de noms est un dictionnaire contenant les noms de variables (clés) et leurs objets correspondants (valeurs).

Une expression Python peut accéder aux variables à la fois dans l'espace de noms local et dans l'espace de noms global. Si une variable locale et une variable globale ont le même nom, la variable locale prévaut sur la variable globale.

Chaque fonction a son propre espace de noms. Les règles de portée pour les méthodes de classe sont les mêmes que pour les fonctions ordinaires.

Python devine intelligemment si une variable est locale ou globale ; il suppose que toute variable à laquelle une valeur est affectée à l'intérieur d'une fonction est locale.

Par conséquent, si vous voulez affecter une valeur à une variable globale à l'intérieur d'une fonction, vous devez utiliser l'instruction global.

L'expression global VarName indique à Python que VarName est une variable globale, donc Python ne recherchera pas cette variable dans l'espace de noms local.

Par exemple, nous définissons une variable Money dans l'espace de noms global. Ensuite, nous affectons une valeur à Money à l'intérieur d'une fonction, et Python suppose que Money est une variable locale. Cependant, comme nous n'avons pas déclaré de variable locale Money avant d'y accéder, une UnboundLocalError se produira. Supprimer le symbole de commentaire devant l'instruction global peut résoudre ce problème.

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
Money = 2000
def AddMoney():
   # 想改正代码就取消以下注释:
   # global Money
   Money = Money + 1
 
print Money
AddMoney()
print Money


Fonction dir()

La fonction dir() renvoie une liste triée de chaînes contenant les noms définis dans un module.

La liste renvoyée contient tous les modules, variables et fonctions définis dans un module. Voici un exemple simple :

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 导入内置math模块
import math
 
content = dir(math)
 
print content;

La sortie de l'exemple ci-dessus est :

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
'sqrt', 'tan', 'tanh']

Ici, la variable de chaîne spéciale __name__ pointe vers le nom du module, et __file__ pointe vers le nom du fichier d'importation du module.



Fonctions globals() et locals()

Selon l'endroit où elles sont appelées, les fonctions globals() et locals() peuvent être utilisées pour renvoyer des noms dans les espaces de noms global et local.

Si locals() est appelée à l'intérieur d'une fonction, elle renvoie tous les noms accessibles dans cette fonction.

Si globals() est appelée à l'intérieur d'une fonction, elle renvoie tous les noms globaux accessibles dans cette fonction.

Le type de retour des deux fonctions est un dictionnaire. Par conséquent, les noms peuvent être extraits à l'aide de la fonction keys().



Fonction reload()

Lorsqu'un module est importé dans un script, le code de la partie de niveau supérieur du module n'est exécuté qu'une seule fois.

Par conséquent, si vous voulez réexécuter le code de niveau supérieur d'un module, vous pouvez utiliser la fonction reload(). Cette fonction réimportera un module précédemment importé. La syntaxe est la suivante :

reload(module_name)

Ici, module_name doit être directement le nom du module, et non une chaîne. Par exemple, pour recharger le module hello :

reload(hello)


Paquets en Python

Un paquet est une structure de répertoires hiérarchique qui définit un environnement d'application Python composé de modules, de sous-paquets et de sous-paquets imbriqués dans des sous-paquets, et ainsi de suite.

En termes simples, un paquet est un dossier, mais le dossier doit contenir un fichier __init__.py, et le contenu de ce fichier peut être vide.__init__.pyIl est utilisé pour identifier que le dossier actuel est un paquet.

Considérez unpackage_exampledans le répertoireexample1.py、example2.py、__init__.py fichier, test.py est le code pour tester l'appel du paquet, la structure du répertoire est la suivante :

test.py
package_example
|-- __init__.py
|-- example1.py
|-- example2.py
Le code source est le suivant :

package_example/example1.py

#!/usr/bin/python # -*- coding: UTF-8 -*- def example1(): print "Je suis dans example1"

package_example/example2.py

#!/usr/bin/python # -*- coding: UTF-8 -*- def example2(): print "Je suis dans example2"

Maintenant, danspackage_examplecréez sous le répertoire__init__.py:

package_example/__init__.py

#!/usr/bin/python # -*- coding: UTF-8 -*- if __name__ == '__main__': print 'exécuter en tant que programme principal' else: print 'initialisation de package_example'

Ensuite nouspackage_example dans le répertoire de même niveaucréons le fichier test.py ci-dessous pour appelerpackage_examplepaquet

test.py

#!/usr/bin/python # -*- coding: UTF-8 -*- # importer le paquet Phone from package_example.example1 import example1 from package_example.example2 import example2 example1() example2()

La sortie de l'exemple ci-dessus est :

package_example 初始化
I'm in example1
I'm in example2

Comme ci-dessus, à titre d'illustration, nous n'avons placé qu'une seule fonction dans chaque fichier, mais en fait vous pouvez placer de nombreuses fonctions. Vous pouvez également définir des classes Python dans ces fichiers, puis créer un paquet pour ces classes.

Autres extensions