V tomto článku se naučíte vytvářet a importovat vlastní moduly v Pythonu. Také najdete různé techniky pro import a použití vlastních a vestavěných modulů v Pythonu.
Video: Moduly Python
Co jsou moduly v Pythonu?
Moduly odkazují na soubor obsahující příkazy a definice Pythonu.
Soubor obsahující kód Pythonu, například:, example.py
se nazývá modul a jeho název modulu by byl example
.
Moduly používáme k rozdělení velkých programů na malé spravovatelné a organizované soubory. Moduly dále poskytují opětovnou použitelnost kódu.
Můžeme definovat naše nejpoužívanější funkce v modulu a importovat je namísto kopírování jejich definic do různých programů.
Vytvořme modul. Zadejte následující text a uložte jej jako example.py
.
# Python Module example def add(a, b): """This program adds two numbers and return the result""" result = a + b return result
Zde jsme definovali funkci add()
uvnitř modulu s názvem example
. Funkce vezme dvě čísla a vrátí jejich součet.
Jak importovat moduly v Pythonu?
Můžeme importovat definice uvnitř modulu do jiného modulu nebo do interaktivního tlumočníka v Pythonu.
K tomu používáme import
klíčové slovo. Chcete-li importovat náš dříve definovaný modul example
, zadejte do příkazového řádku Pythonu následující.
>>> import example
Tím se neimportují názvy funkcí definovaných example
přímo v aktuální tabulce symbolů. Importuje pouze název modulu example
.
Pomocí názvu modulu můžeme k funkci přistupovat pomocí tečkového .
operátoru. Například:
>>> example.add(4,5.5) 9.5
Python má spoustu standardních modulů. Můžete si prohlédnout úplný seznam standardních modulů Pythonu a jejich případů použití. Tyto soubory jsou v adresáři Lib uvnitř umístění, kde jste nainstalovali Python.
Standardní moduly lze importovat stejným způsobem, jako importujeme naše uživatelem definované moduly.
Existuje několik způsobů, jak importovat moduly. Jsou uvedeny níže …
Výpis importu Pythonu
Můžeme importovat modul pomocí import
příkazu a přistupovat k definicím v něm pomocí operátoru tečky, jak je popsáno výše. Zde je příklad.
# import statement example # to import standard module math import math print("The value of pi is", math.pi)
Když spustíte program, výstup bude:
Hodnota pí je 3,141592653589793
Import s přejmenováním
Modul můžeme importovat přejmenováním následujícím způsobem:
# import module by renaming it import math as m print("The value of pi is", m.pi)
math
Modul jsme přejmenovali na m
. To nám v některých případech může ušetřit čas při psaní.
Název math
není v našem oboru rozpoznán. Proto math.pi
je neplatný a m.pi
je správnou implementací.
Python z … prohlášení o importu
Můžeme importovat konkrétní názvy z modulu, aniž bychom importovali modul jako celek. Zde je příklad.
# import only pi from math module from math import pi print("The value of pi is", pi)
Zde jsme importovali pouze pi
atribut z math
modulu.
V takových případech nepoužíváme operátor tečky. Můžeme také importovat více atributů následujícím způsobem:
>>> from math import pi, e >>> pi 3.141592653589793 >>> e 2.718281828459045
Importujte všechna jména
Můžeme importovat všechna jména (definice) z modulu pomocí následující konstrukce:
# import all names from the standard module math from math import * print("The value of pi is", pi)
Zde jsme importovali všechny definice z matematického modulu. To zahrnuje všechna jména viditelná v našem oboru kromě těch, která začínají podtržítkem (soukromé definice).
Importing everything with the asterisk (*) symbol is not a good programming practice. This can lead to duplicate definitions for an identifier. It also hampers the readability of our code.
Python Module Search Path
While importing a module, Python looks at several places. Interpreter first looks for a built-in module. Then(if built-in module not found), Python looks into a list of directories defined in sys.path
. The search is in this order.
- The current directory.
PYTHONPATH
(an environment variable with a list of directories).- The installation-dependent default directory.
>>> import sys >>> sys.path ('', 'C:\Python33\Lib\idlelib', 'C:\Windows\system32\python33.zip', 'C:\Python33\DLLs', 'C:\Python33\lib', 'C:\Python33', 'C:\Python33\lib\site-packages')
We can add and modify this list to add our own path.
Reloading a module
The Python interpreter imports a module only once during a session. This makes things more efficient. Here is an example to show how this works.
Suppose we have the following code in a module named my_module
.
# This module shows the effect of # multiple imports and reload print("This code got executed")
Now we see the effect of multiple imports.
>>> import my_module This code got executed >>> import my_module >>> import my_module
We can see that our code got executed only once. This goes to say that our module was imported only once.
Now if our module changed during the course of the program, we would have to reload it.One way to do this is to restart the interpreter. But this does not help much.
Python provides a more efficient way of doing this. We can use the reload()
function inside the imp
module to reload a module. We can do it in the following ways:
>>> import imp >>> import my_module This code got executed >>> import my_module >>> imp.reload(my_module) This code got executed
The dir() built-in function
Pomocí této dir()
funkce můžeme zjistit jména, která jsou definována uvnitř modulu.
Například jsme definovali funkci add()
v modulu, example
který jsme měli na začátku.
Můžeme použít dir
v example
modulu následujícím způsobem:
>>> dir(example) ('__builtins__', '__cached__', '__doc__', '__file__', '__initializing__', '__loader__', '__name__', '__package__', 'add')
Zde vidíme seřazený seznam jmen (spolu s add
). Všechny ostatní názvy, které začínají podtržítkem, jsou výchozí atributy Pythonu přidružené k modulu (nejsou definované uživatelem).
Například __name__
atribut obsahuje název modulu.
>>> import example >>> example.__name__ 'example'
Všechna jména definovaná v našem aktuálním oboru názvů lze zjistit pomocí dir()
funkce bez jakýchkoli argumentů.
>>> a = 1 >>> b = "hello" >>> import math >>> dir() ('__builtins__', '__doc__', '__name__', 'a', 'b', 'math', 'pyscripter')