Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 17b3ec3

Browse files
committed
Lecture 7
1 parent c62f596 commit 17b3ec3

File tree

1 file changed

+346
-0
lines changed

1 file changed

+346
-0
lines changed

‎Lecture7.md‎

Lines changed: 346 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,346 @@
1+
---
2+
title:
3+
- Akademia Pythona
4+
author:
5+
- V Moduły
6+
theme:
7+
- Copenhagen
8+
---
9+
10+
11+
# KN Pythona - Kurs Pythona
12+
13+
KN Pythona wita na kursie Pythona.
14+
15+
Plan:
16+
17+
+ Moduły: wprowadzenie
18+
+ Podstawy tworzenia modułów
19+
+ Pakiety modułów
20+
+ Zaawansowane zaganienia związane z modułami
21+
22+
23+
# Moduły
24+
25+
Rola modułów:
26+
27+
- Ponowne wykorzystanie kodu
28+
- Dzielenie przestrzeni nazw systemu
29+
- Implementowanie współdzielonych usług oraz danych
30+
31+
32+
# Struktura programu
33+
34+
Program w Pythonie najczęściej składa się z plików tekstowych zawierających instrukcje Pythona.
35+
Program ustrukturyzowany jest jako jeden główny plik najwyższego poziomu wraz z plikami dodatkowymi (modułami).
36+
37+
38+
# Moduły - wprowadzenie
39+
40+
b.py
41+
42+
```python
43+
def say(text):
44+
print(f'Saying: {text}')
45+
```
46+
47+
48+
# Moduły - wprowadzenie
49+
50+
a.py
51+
52+
```python
53+
import b
54+
55+
b.say('hello!')
56+
```
57+
58+
59+
# Jak działa importowanie?
60+
61+
Importowanie:
62+
63+
- Odnalezienie pliku modułu
64+
- Skompilowanie go do kodu bajtowego
65+
- Wykonanie kodu modułu w celu utworzenia definiowanych przez niego obiektów
66+
67+
68+
# Odnajdywanie pliku
69+
70+
```python
71+
import C:\katalog1\b.py # niepoprawnie
72+
73+
import b # poprawnie
74+
```
75+
76+
77+
# Odnajdywanie pliku
78+
79+
Ścieżka wyszukiwania modułów:
80+
81+
- Katalog główny programu
82+
- Katalogi PYTHONPATH
83+
- Katalogi biblioteki standardowej
84+
- Zawartość wszystkich plików .pth
85+
86+
87+
# Kompilowanie
88+
89+
Python sprawdza daty plików źródłowych i skompilowanych, a następnie dokonuje kompilacji jeżeli jest taka potrzeba. Pliki skompilowane zapisywane są z rozszerzeniem .pyc
90+
91+
92+
# Wykonanie
93+
94+
W trakcie importowania Python wykona wszystkie instrukcje z modułu od góry do dołu, a nastepnie przypisze zakres globalny modułu do zmiennej o nazwie modułu.
95+
96+
97+
# Moduły
98+
99+
```python
100+
import sys
101+
sys.path
102+
```
103+
104+
105+
# Import b
106+
107+
Wybór pliku modułu dla **import b**:
108+
109+
- Plik z kodem źródłowym o nazwie b.py
110+
- Plik z kodem bajtowym o nazwie b.pyc
111+
- Katalog o nazwie b (importowanie pakietów)
112+
- Skompilowany moduł rozszerzenia np. C, C++ (b.so, b.dll, b.pyd)
113+
- Skompilowany moduł wbudowany napisany w języku C i statycznie dołączony do Pythona
114+
- Komponent pliku ZIP rozpakowywany automatycznie po zaimportowaniu
115+
- Obraz z pamięci (zamrożone pliki wykonywalne)
116+
- Klasę języka JAVA (Jython)
117+
- Komponent .NET (IronPython)
118+
119+
120+
# Nazewnictwo modułów
121+
122+
Nazwy modułów muszą być poprawnymi nazwami zmiennych Pythona, jeżeli chcemy je importować.
123+
124+
125+
# Tworzenie modułów
126+
127+
module1:
128+
```python
129+
def printer(text):
130+
print(text)
131+
```
132+
133+
134+
# Tworzenie modułów
135+
136+
```python
137+
import module1
138+
module1.printer('Hello!')
139+
```
140+
141+
142+
# Tworzenie modułów
143+
144+
```python
145+
from module1 import printer
146+
printer('Hello!')
147+
```
148+
149+
150+
# Tworzenie modułów
151+
152+
```python
153+
from module1 import *
154+
printer('Hello!')
155+
```
156+
157+
158+
# Moduły
159+
160+
Operacja importowania odbywa się tylko raz.
161+
162+
163+
# Moduły
164+
165+
Instrukcje import oraz from:
166+
167+
- Instrukcja import przypisuje cały obiekt modułu do jednej nazwy.
168+
- Instrukcja from przypisuje jedną lub więcej zmiennych do obiektów o tych samych nazwach w innym module.
169+
170+
171+
# Przestrzenia nazw modułów
172+
173+
Pliki generują przestrzenie nazw:
174+
175+
- Instrukcje modułów wykonywane są przy pierwszej operacji importowania.
176+
- Przypisania na najwyższym poziomie pliku trworzą atrybuty modułów.
177+
- Dostęp do przestrzeni nazw modułu odbywa się za pomocą atrybutu __dict__ lub dir(M)
178+
179+
180+
# Moduły
181+
182+
module2.py
183+
184+
```python
185+
print('Started loading...')
186+
import sys
187+
name = 42
188+
def func(): pass
189+
class klass: pass
190+
print('Finished loading...')
191+
```
192+
193+
194+
# Moduły
195+
196+
```python
197+
import module2
198+
199+
module2.sys
200+
module2.name
201+
module2.func
202+
module2.klass
203+
list(module2.__dict__.keys())
204+
```
205+
206+
207+
# Podstawy przeładowywania modułów
208+
209+
```python
210+
import module
211+
212+
from importlib import reload
213+
214+
reload(module)
215+
```
216+
217+
218+
# Podstawy przeładowywania modułów
219+
220+
Przeładowywanie:
221+
222+
- Funkcja reload wykonuje nowy kod pliku modułu w bieżącej przestrzeni nazw modułu.
223+
- Przypisania najwyższego poziomu w pliku zastępują zmienne z nowymi wartościami.
224+
- Przeładowanie ma wpływ na każdy kod wykorzystujący instrukcję import do pobrania modułów.
225+
- Przeładowanie ma wpływ jedynie na przyszły kod wykorzystujący instrukcję **from**.
226+
227+
228+
# Podstawy importowania pakietów
229+
230+
```python
231+
import dir1.dir2.module
232+
233+
from dir1.dir2 import module
234+
235+
# zakładając dir0/dir1/dir2/module.py
236+
# dir0 w ścieżce wyszukiwania Pythona
237+
```
238+
239+
240+
# Katalogi pakietów
241+
242+
Katalogi pakietów muszą zawierać plik __init__.py
243+
244+
245+
246+
# Katalogi pakietów
247+
248+
```
249+
dir0\
250+
dir1\
251+
__init__.py
252+
dir2\
253+
__init__.py
254+
module.py
255+
```
256+
257+
258+
# Pliki __init__.py
259+
260+
Rola plików __init__.py:
261+
262+
- Inicjalizacja pakietów
263+
- Inicjalizacja przestrzeni nazw modułu
264+
- Definicja listy __all__
265+
266+
267+
# Importy względne
268+
269+
```python
270+
import string
271+
from mypkg import string
272+
from . import string
273+
from .. import string
274+
```
275+
276+
277+
# Minimalizacja niebezpieczeństw
278+
279+
```python
280+
_non_exported = 12
281+
exported = 13
282+
283+
__all__ = ['this', 'will', 'be', 'exported']
284+
```
285+
286+
287+
# Mieszany tryb użycia
288+
289+
```python
290+
...
291+
292+
293+
if __name__ == '__main__':
294+
main()
295+
```
296+
297+
298+
# Rozszerzenie as dla instrukcji import oraz from
299+
300+
```python
301+
import module
302+
name = module
303+
func2 = module.func1
304+
del module
305+
```
306+
307+
308+
# Rozszerzenie as dla instrukcji import oraz from
309+
310+
```python
311+
import module as name
312+
from module import func1 as func2
313+
```
314+
315+
316+
# Metaprogramy
317+
318+
```python
319+
import M
320+
M.name
321+
M.__dict__['name']
322+
sys.modules['M'].name
323+
getattr(M, 'name')
324+
```
325+
326+
327+
# Importowanie modułów
328+
329+
```python
330+
import 'module' # Błąd
331+
332+
from importlib import import_module
333+
import_module('module')
334+
335+
exec('import module')
336+
```
337+
338+
339+
# Projektowanie modułów
340+
341+
Reguły projektowania modułów:
342+
343+
- W Pythonie zawsze jesteśmy w module.
344+
- Należy minimalizować połączenia pomiędzy modułami w postaci zmiennych globalnych.
345+
- Maksymalizacja spójności modułów: jeden cel.
346+
- Moduły powinny rzadko modyfikować zmienne z innych modułów.

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /