Comment utiliser l’instruction from…import

2022-09-27 03:21:37  mardi  6607 mots  

L’instruction from…import offre l’avantage de n’importer que les attributs d’un module dont vous avez besoin. Elle consomme donc moins de mémoire et de ressources système que l’instruction import. De plus, elle rend l’utilisation du module un peu plus facile, car certaines commandes, telles que dir(), montrent moins d’informations, ou seulement celles dont vous avez vraiment besoin. Vous obtenez donc uniquement ce que vous voulez et rien d’autre. Les étapes qui suivent explicitent l’emploi de l’instruction from…import.

  1. Ouvrez une fenêtre Python en mode Shell.
  2. Faites pointer Python vers le dossier qui contient votre code source.
    Reportez à l’encadré «Changer le dossier courant de Python».
  3. Tapez from MyLibrary import SayHello et appuyez sur Entrée.
    Python importe la fonction SayHello() du module MyLibrary, et uniquement celle-ci 并且只有这个.
    Vous pouvez toujours importer la totalité du module si c’est ce que vous voulez. ► Les deux techniques pour obtenir ce résultat consistent soit à créer une liste d’attributs à importer en séparant leur nom par une virgule (comme dans MyLibrary import SayHello, SayGoodbye), soit à utiliser le caractère de substitution * pour remplacer un nom quelconque. ♦
  4. Tapez dir(MyLibrary) et appuyez sur Entrée.
    Python va afficher un message d’erreur. Il n’importe en effet que l’attribut que vous avez spécifié, et non le module entier. Par conséquent, le module MyLibrary n’est pas en mémoire. Seuls les attributs indiqués le sont.
  5. Tapez dir(SayHello) et appuyez sur Entrée.
    Cette fois, vous voyez une liste d’attributs qui sont associés à la fonction SayHello(). À ce stade, il n’est pas important de comprendre comment ces attributs fonctionnent, mais vous en utiliserez certainement.

Ce qu'on tape :

Python 3.10.5 (tags/v3.10.5:f377153, Jun  6 2022, 16:14:13) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.chdir('D:\\Python\\Code\\Nuls\\Chapitre10')
>>> from MyLibrary import SayHello
>>> dir(SayHello)
['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> dir(MyLibrary)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'MyLibrary' is not defined
>>> dir(MyLibrary)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'MyLibrary' is not defined
>>> dir(SayHello)
['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> from MyLibrary import SayHello
>>> dir(MyLibrary)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'MyLibrary' is not defined
>>> from MyLibrary import SayHello
>>> dir(MyLibrary)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'MyLibrary' is not defined
>>>

Tapez SayHello(’Claire’) et appuyez sur Entrée.

La fonction SayHello() ne nécessite plus le nom du module.

>>> SayHello('阿当')
Bonjour  阿当

La fonction SayHello() produit le résultat escompté 预期.

Lorsque vous importez des attributs en utilisant l’instruction from…import, il n’est pas nécessaire de faire précéder leur nom de celui du module d’où ils proviennent. Ceci facilite donc leur accès ♦.

L’emploi de l’instruction from…import peut également provoquer des problèmes. Si deux attributs possèdent le même nom, vous ne pouvez importer que l’un d’entre eux ♦. L’instruction import évite ce genre de collision, ce qui est important si vous devez importer un grand nombre d’attributs. Tapez SayGoodbye(’Antoine’) et appuyez sur Entrée.

Vous n’avez importé que la fonction SayHello(). Python ne sait donc rien de la fonction SayGoodbye(), et il affiche par conséquent un message d’erreur. La nature même de l’instruction from…import peut être une source de problèmes si vous n’avez pas pris toutes vos précautions et que vous supposez 假设 qu’un certain attribut est présent, alors qu’il n’y est pas.

>>> SayGoodbye('ren哥')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'SayGoodbye' is not defined

Refermez la fenêtre de Python.

 
Commentaire