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 :
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 :
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.pyLe code source est le suivant :
package_example/example1.py
package_example/example2.py
Maintenant, danspackage_examplecréez sous le répertoire__init__.py:
package_example/__init__.py
Ensuite nouspackage_example dans le répertoire de même niveaucréons le fichier test.py ci-dessous pour appelerpackage_examplepaquet
test.py
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