Get started learning Python with DataCamp's free Intro to Python tutorial. Learn Data Science by completing interactive coding challenges and watching videos by expert instructors. Start Now!
This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join 11 million other learners and get started learning Python for data science today!
Good news! You can save 25% off your Datacamp annual subscription with the code LEARNPYTHON23ALE25 - Click here to redeem your discount
Moduly a balíčky
V programování je modul součást softwaru, která má specifickou funkčnost. Například při budování ping pong hry může být jeden modul zodpovědný za herní logiku, zatímco jiný modul kreslí hru na obrazovku. Každý modul se skládá z různých souborů, které lze editovat samostatně.
Psaní modulů
Moduly v Pythonu jsou jednoduše Python soubory s příponou .py. Název modulu je stejný jako název souboru. Python modul může mít sadu funkcí, tříd nebo proměnných definovaných a implementovaných. Příklad výše zahrnuje dva soubory:
mygame/
-
mygame/game.py
-
mygame/draw.py
Python skript game.py
implementuje hru. Používá funkci draw_game
ze souboru draw.py
,
nebo jinými slovy draw
modul, který implementuje logiku pro kreslení hry na obrazovku.
Moduly jsou importovány z jiných modulů pomocí příkazu import
. V tomto příkladu by skript game.py
mohl vypadat nějak takto:
Modul draw
by mohl vypadat nějak takto:
V tomto příkladu modul game
importuje modul draw
, což mu umožňuje používat funkce implementované v tomto modulu. Funkce main
používá lokální funkci play_game
ke spuštění hry a poté kreslí výsledek hry pomocí funkce implementované v modulu draw
zvané draw_game
. Pro použití funkce draw_game
z modulu draw
je třeba specifikovat, ve kterém modulu je funkce implementována, pomocí tečkového operátoru. Pro odkaz na funkci draw_game
z modulu game
je třeba modul draw
importovat a poté volat draw.draw_game()
.
Když se příkaz import draw
spustí, Python interpret hledá ve složce, ve které byl skript spuštěn, soubor s názvem modulu a příponou .py
. V tomto případě bude hledat draw.py
. Pokud je nalezen, bude importován. Pokud nebude nalezen, bude pokračovat v hledání vestavěných modulů.
Možná jste si všimli, že při importu modulu se vytvoří soubor .pyc
. To je zkompilovaný Python soubor. Python kompiluje soubory do Python bytecode, aby nemusel soubory parsovat pokaždé, když se moduly načítají. Pokud existuje soubor .pyc
, načte se místo souboru .py
. Tento proces je uživateli transparentní.
Importování objektů modulu do aktuálního jmenného prostoru
Jmenný prostor je systém, kde je každý objekt pojmenován a může být v Pythonu přístupný. Funkci draw_game
importujeme do jmenného prostoru hlavního skriptu pomocí příkazu from
.
Možná jste si všimli, že v tomto příkladu není jméno modulu uvedeno před draw_game
, protože jsme specifikovali jméno modulu pomocí příkazu import
.
Výhodou této notace je, že nemusíte opakovaně odkazovat na modul. Nicméně, jmenný prostor nemůže mít dva objekty se stejným názvem, takže příkaz import
může nahradit existující objekt ve jmenném prostoru.
Importování všech objektů z modulu
Příkaz import *
můžete použít k importování všech objektů v modulu takto:
To může být poněkud riskantní, protože změny v modulu mohou ovlivnit modul, který jej importuje, ale je to kratší a nevyžaduje specifikaci každého objektu, který chcete z modulu importovat.
Vlastní jméno importu
Moduly mohou být načteny pod jakýmkoli jménem, které si přejete. To je užitečné při podmíněném importu modulu, abyste mohli použít stejné jméno ve zbytku kódu.
Například, pokud máte dva draw
moduly s mírně odlišnými jmény, můžete udělat následující:
Inicializace modulu
Poprvé, když je modul načten do běžícího Python skriptu, je inicializován pomocí provedení kódu v modulu jednou. Pokud jiný modul ve vašem kódu importuje stejný modul znovu, nebude se znovu načítat, takže lokální proměnné uvnitř modulu fungují jako "singleton", což znamená, že jsou inicializovány pouze jednou.
Můžete to pak použít k inicializaci objektů. Například:
Rozšíření cesty pro načítání modulů
Existuje několik způsobů, jak říci Python interpreteru, kde hledat moduly, kromě výchozí místní složky a vestavěných modulů. Můžete použít proměnnou prostředí PYTHONPATH
k zadání dodatečných složek k hledání modulů takto:
To provede game.py
a umožní skriptu načítat moduly ze složky foo
a také z místní složky.
Můžete také použít funkci sys.path.append
. Spusťte ji před vykonáním příkazu import
:
Teď byla složka foo
přidána do seznamu cest, kde se hledají moduly.
Prozkoumávání vestavěných modulů
Podívejte se na kompletní seznam vestavěných modulů ve standardní knihovně Python zde.
Dvě velmi důležité funkce se hodí při zkoumání modulů v Pythonu - funkce dir
a help
.
Pro import modulu urllib
, který umožňuje vytvářet a číst data z URL, importujeme modul:
Můžeme zjistit, které funkce jsou implementovány v každém modulu pomocí funkce dir
:
Když najdeme funkci v modulu, kterou chceme použít, můžeme si o ní přečíst více pomocí funkce help
v Python interpretu:
Psaní balíčků
Balíčky jsou jmenné prostory obsahující více balíčků a modulů. Jsou to pouze složky, ale s určitými požadavky.
Každý balíček v Pythonu je složka, která MUSÍ obsahovat speciální soubor nazvaný __init__.py
. Tento soubor, který může být prázdný, indikuje, že složka, ve které se nachází, je Python balíček. Tímto způsobem může být importován stejným způsobem jako modul.
Pokud vytvoříme složku nazvanou foo
, která označuje název balíčku, můžeme pak vytvořit modul uvnitř tohoto balíčku nazvaný bar
. Poté přidáme soubor __init__.py
uvnitř složky foo
.
Chceme-li použít modul bar
, můžeme ho importovat dvěma způsoby:
nebo:
V prvním příkladu výše musíme použít předponu foo
, kdykoli přistupujeme k modulu bar
. Ve druhém příkladu již nemusíme, protože jsme modul importovali do našeho jmenného prostoru modulu.
Soubor __init__.py
může také rozhodnout, které moduly balíček exportuje jako API, zatímco ostatní moduly zůstávají interní, přepsáním proměnné __all__
takto:
Cvičení
V tomto cvičení vytiskněte seznam všech funkcí v modulu re
, které obsahují slovo find
, seřazený abecedně.
This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join over a million other learners and get started learning Python for data science today!
