Qu'est-ce que le package en python ? Qu'est-ce que ça fait ? Introduction aux packages en python

不言
Libérer: 2018-11-20 16:10:57
avant
7513 Les gens l'ont consulté

Le contenu de cet article concerne ce qu'est le package en python ? Qu'est-ce que ça fait ? L'introduction de packages en python a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer, j'espère que cela vous sera utile.

1. Qu'est-ce qu'un package ?

Le package est un moyen d'organiser l'espace de noms du module python via ".nom du module". être appelé un package.

Mais veuillez noter qu'il est spécifié dans python2 Le fichier __init__.py doit exister à l'intérieur du package.

Le but de. créer un package ne consiste pas à exécuter, mais à être importé et utilisé. Un package n'est qu'un formulaire, et l'essence d'un package est un module.

2. >

Package Il s'agit essentiellement d'un dossier, donc la seule fonction d'un dossier est d'organiser les fichiers. À mesure que de plus en plus de fonctions sont écrites, nous ne pouvons pas mettre

toutes les fonctions dans un seul dossier, nous utilisons donc des modules. aux fonctions d'organisation, comme il y a de plus en plus de modules, nous devons utiliser des dossiers pour organiser

les fichiers de modules afin d'améliorer la structure et la maintenabilité du programme

Suivant Créer des packages pour un apprentissage ultérieur. . Les packages sont faciles à créer. Vous avez seulement besoin d'un dossier avec __init__.py

import os
os.makedirs('glance/api')
os.makedirs('glance/cmd')
os.makedirs('glance/db')
l = []
l.append(open('glance/__init__.py','w'))
l.append(open('glance/api/__init__.py','w'))
l.append(open('glance/api/policy.py','w'))
l.append(open('glance/api/versions.py','w'))
l.append(open('glance/cmd/__init__.py','w'))
l.append(open('glance/cmd/manage.py','w'))
l.append(open('glance/db/__init__.py','w'))
l.append(open('glance/db/models.py','w'))
map(lambda f:f.close() ,l)
Copier après la connexion
Créez la structure des répertoires

Nous ajoutons quelques méthodes. chaque dossier :

#policy.py
def get():
    print('from policy.py')
    
#versions.py
def create_resource(conf):
    print('from version.py: ',conf)
    
#manage.py
def main():
    print('from manage.py')
    
#models.py
def register_models(engine):
    print('from models.py: ',engine)
Copier après la connexion
Nous pouvons utiliser le contenu du package dans test.py, et nous pouvons l'utiliser lors de l'importation du package Le formulaire d'importation ou depuis xxx import xxx

import glance.db.models
glance.db.models.register_models('mysql')
from glance.api.policy import get
get()
Copier après la connexion
Cependant, attention : sous la forme de from xxx import xxx, "point" ne peut pas apparaître après l'importation. En d'autres termes, from a.b import c est ok.

Mais from a import b.c c'est faux<🎜. >

3. Que fait __init__.py ?

Quelle que soit la méthode utilisée pour importer un package, chaque fois qu'un package ou toute autre partie du package est importé pour le la première fois, le fichier __init__.py sera exécuté en premier

Ce fichier peut être vide, mais il peut également stocker du code d'initialisation.

Il en va de même pour l'importation from xxx * que nous avons utilisée auparavant. être utilisé pour les appels de packages ?

Oui, nous devons donner __all__ dans le fichier __init__.py pour déterminer le contenu de l'importation *.

test.py
print("我是glance的__init__.py⽂件. ")
x = 10
def hehe():
    print("我是呵呵")
    
def haha():
    print("我是哈哈")
__all__ = [&#39;x&#39;, "hehe"]
Copier après la connexion

4. Importation relative et importation absolue
from glance import *
print(x) # OK
hehe() # OK
haha() # 报错. __all__⾥没有这个⻤东⻄
Copier après la connexion

Notre aperçu final du package est écrit pour que d'autres puissent l'utiliser, puis en un coup d'œil, il sera également nécessaire de s'importer mutuellement à l'intérieur du package à ce moment-là. , il existe deux méthodes d'importation : l'importation absolue et l'importation relative

1). Importation absolue : un coup d'œil comme point de départ

2). point de départ

. Par exemple, nous utilisons ⽤glance/cmd/manage.py

dans look/api/version.py Nous devons faire attention lorsque nous testons le chemin du package python. est lié au répertoire où se trouve le script en cours d'exécution.
# 在glance/api/version.py
#绝对导⼊
from glance.cmd import manage
manage.main()
#相对导⼊
# 这种情形不可以在versions中启动程序.
# attempted relative import beyond top-level package
from ..cmd import manage
manage.main()
Copier après la connexion

En python, vous n'êtes pas autorisé à exécuter un programme qui dépasse la portée du package actuel (importation relative).

Si vous utilisez l'importation absolue, ce problème n'existe pas. Autrement dit, si vous utilisez l'importation relative dans le package, alors lorsque vous utilisez les informations contenues dans le package, vous ne pouvez les importer qu'en dehors du package

# 在policy.py
import versions
Copier après la connexion

Si le point d'entrée de notre programme est la politique, alors il n'y aura aucun problème avec le programme pour le moment. Mais si nous importons la politique en dehors du regard, une erreur sera signalée. La raison est que lors de l'accès à la stratégie depuis l'extérieur, le chemin dans .sys.path est à l'extérieur. Le module versions ne peut donc pas être trouvé directement. Une erreur sera donc certainement signalée :

Lorsque nous faisons une erreur lors de l'importation d'un package, nous devons d'abord regarder sys.path pour voir si nous pouvons vraiment obtenir les informations sur le package

5. . Importez un package séparément
ModuleNotFoundError: No module named &#39;versions&#39;
Copier après la connexion

Le coup d'œil importé ne peut rien faire pour le moment car il n'y a pas de chargement de sous-packages dans __init__.py Pour le moment, nous devons introduire séparément le package. contenu des sous-packages dans __init__.py .

1. Utilisez des chemins relatifs
# 在test.py中
import glance
Copier après la connexion

2. Utilisez des chemins absolus

Notes sur les packages :

Importer les instructions liées aux packages sont également import. et from xxx import xxx, mais peu importe laquelle est utilisée, peu importe où elle se trouve, un principe doit être suivi lors de l'importation : tout ce qui comporte un point lors de l'importation, le côté gauche du

dot doit être un package . Sinon, une erreur sera signalée. Vous pouvez apporter une série de points. Par exemple : from a.b.c import d

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!