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 785e053

Browse files
committed
Lecture 5
1 parent e60b9a9 commit 785e053

File tree

2 files changed

+474
-0
lines changed

2 files changed

+474
-0
lines changed

‎Lecture5.md‎

Lines changed: 394 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,394 @@
1+
---
2+
title:
3+
- Akademia Pythona
4+
author:
5+
- IV Funkcje
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+
+ Podstawy funkcji
18+
+ Zakresy
19+
+ Argumenty
20+
21+
22+
# Podstawy funkcji
23+
24+
Funkcja jest narzędziem grupującym zbiór instrukcji w taki sposób, by mogły być one wykonane w programie więcej niż jeden raz.
25+
Funkcje obliczają wartość wyniku i pozwalają nam określić parametry służące za dane wejściowe.
26+
27+
28+
# Instrukcje oraz wyrażenia powiązane z funkcjami
29+
30+
| Instrukcja | Przykłady |
31+
|---|---|
32+
| Wywołania | myfunc('a', 'b', 'c') |
33+
| def, return | def add(a, b):return a + b |
34+
| global | def changer(): global x; x = 'new' |
35+
| nonlocal | def changer(): nonlocal x; x = 'new' |
36+
| yield | def squares(x): for i in x: yield i ** 2 |
37+
| lambda | funcs = [lambda x: x**2, lambda x: x**3 |
38+
39+
40+
# Po co używa się funkcji?
41+
42+
Po co używa się funkcji:
43+
44+
- Maksymalizacja ponownego wykorzystania kodu i minimalizacja jego powtarzalności
45+
- Proceduralne podzielenie na części
46+
47+
48+
# Tworzenie funkcji
49+
50+
**def** to kod wykonywalny.
51+
52+
53+
# Tworzenie funkcji
54+
55+
Instrukcja **def** tworzy obiekt i przypisuje go do nazwy.
56+
57+
58+
# Tworzenie funkcji
59+
60+
Wyrażenie **lambda** tworzy obiekt i zwraca go jako wynik.
61+
62+
63+
# Tworzenie funkcji
64+
65+
Instrukcja **return** przesyła wynikowy obiekt z powrotem do wywołującego.
66+
67+
68+
# Tworzenie funkcji
69+
70+
Instrukcja **yield** odsyła wynikowy obiekt z powrotem do wywołującego, jednak zapamiętuje, gdzie zakończyła działanie.
71+
72+
73+
# Tworzenie funkcji
74+
75+
Instrukcja **global** deklaruje zmienne, które mają być przypisane na poziomie modułu.
76+
77+
78+
# Tworzenie funkcji
79+
80+
Instrukcja **nonlocal** deklaruje zmienne z funkcji zawierającej, które mają być przypisane.
81+
82+
83+
# Tworzenie funkcji
84+
85+
Argumenty przekazywane są przez przypisanie (referencję obiektu).
86+
87+
88+
# Tworzenie funkcji
89+
90+
Argumenty, zwracane wartości i zmienne nie są deklarowane.
91+
92+
93+
# Instrukcje def
94+
95+
Ogólny format
96+
97+
```python
98+
def <nazwa>(arg1, arg2, ..., argN):
99+
<instrukcje>
100+
```
101+
102+
103+
# Instrukcje def
104+
105+
```python
106+
def <nazwa>(arg1, arg2, ..., argN):
107+
...
108+
return <wartość>
109+
```
110+
111+
112+
# Instrukcja def uruchamiana jest w trakcie wykonywania
113+
114+
```python
115+
if test:
116+
def func():
117+
<instrukcje1>
118+
else:
119+
def func():
120+
<instrukcje2>
121+
func() # ?
122+
```
123+
124+
125+
# Funkcje są obiektami
126+
127+
```python
128+
othername = func # Przypisanie obiektu funkcji
129+
othername()
130+
131+
func.attr = value # Dołączenie atrybutów
132+
```
133+
134+
135+
# Przykład
136+
137+
```python
138+
def times(x, y):
139+
return x * y
140+
141+
times(2, 4) # 8
142+
times(3.14, 4) # 12.56
143+
times('xd', 3) # 'xdxdxd'
144+
```
145+
146+
147+
# Przykład
148+
149+
```python
150+
def intersect(seq1, seq2):
151+
res = []
152+
for x in seq1:
153+
if x in seq2:
154+
res.append(x)
155+
return res
156+
```
157+
158+
159+
# Przykład
160+
161+
```python
162+
intersect('abcd', 'cdef') # ['c', 'd']
163+
intersect([1, 2, 3], (1, 4)] # [1]
164+
```
165+
166+
167+
# Zakresy
168+
169+
Zakresy Pythona - miejsca, w których zmienna jest przypisywana i wyszukiwana.
170+
171+
172+
# Zakresy
173+
174+
Zakresy:
175+
176+
- Nazwy zdefiniowane wewnątrz instrukcji **def** mogą być widoczne jedynie dla kodu wewnątrz tej funkcji.
177+
- Nazwy zdefiniowane wewnątrz instrukcji **def** nie wchodzą w konflikt ze zmiennymi spoza tej instrukcji, nawet jeżeli tak samo się nazywają.
178+
179+
180+
# Zakresy
181+
182+
Zakresy:
183+
184+
- Jeżeli zmienna zostanie przypisana wewnątrz instrukcji **def**, staje się zmienną lokalną dla tej funkcji.
185+
- Jeżeli zmienna przypisana jest wewnątrz instrukcji **def** zawierającej inną funkcję, staje się ona zmienną nielokalną dla tej funkcji.
186+
- Jeżeli zmienna przypisana jest poza wszystkimi instrukcjami **def**, staje się ona zmienną globalną dla całego pliku.
187+
188+
189+
# Zakresy
190+
191+
```python
192+
x = 99
193+
194+
def func():
195+
x = 87
196+
197+
print(x) # 99
198+
```
199+
200+
201+
# Zakresy
202+
203+
Reguły dotyczące zakresów:
204+
205+
- Moduł zawierający funkcję jest zakresem globalnym.
206+
- Zakres globalny rozciąga się jedynie na jeden plik.
207+
- Każde wywołanie funkcji tworzy nowy zakres lokalny.
208+
- Przypisane nazwy są lokalne, o ile nie zostaną zadeklarowane jako globalne lub nielokalne.
209+
- Wszystkie pozostałe nazwy są lokalne dla zakresu zawierającego, globalne lub wbudowane.
210+
211+
212+
# Zakresy
213+
214+
Reguła LEGB:
215+
216+
- Local
217+
- Enclosing
218+
- Global
219+
- Built-in
220+
221+
222+
# Zakresy
223+
224+
Rozwiązywanie konfliktów w zakresie nazw - reguła LEGB:
225+
226+
- Referencje do nazw przeszukują cztery zakresy: lokalny, zawierający, globalny i wbudowany.
227+
- Przypisania nazw domyślnie tworzą lub modyfikują nazwy lokalne.
228+
- Deklaracje global i nonlocal odwzorowują przypisane nazwy na zakres modułu zawierającego oraz funkcji zawierającej.
229+
230+
231+
# Zakresy
232+
233+
```python
234+
# Zakres globalny
235+
x = 99
236+
237+
def func(y):
238+
# Zakres lokalny
239+
z = x + y
240+
return z
241+
242+
func(1) # 100
243+
```
244+
245+
246+
# Zakresy
247+
248+
```python
249+
import builtins
250+
dir(builtins)
251+
```
252+
253+
254+
# Zakresy
255+
256+
```python
257+
x = 88
258+
259+
def func():
260+
global x
261+
x = 99
262+
263+
func()
264+
print(x) # 99
265+
```
266+
267+
268+
# Zakresy
269+
270+
```python
271+
x = 99
272+
def f1():
273+
x = 88
274+
def f2():
275+
print(x)
276+
f2()
277+
278+
f1() # 88
279+
```
280+
281+
282+
# Funkcje fabryczne
283+
284+
```python
285+
def maker(n):
286+
def action(x):
287+
return x ** n
288+
return action
289+
290+
f = maker(2)
291+
f(2) # 4
292+
f(3) # 9
293+
f = maker(3)
294+
f(2) # 9
295+
```
296+
297+
298+
# Zakresy
299+
300+
```python
301+
def make_actions():
302+
acts = []
303+
for i in range(5):
304+
acts.append(lambda x, i=i: i ** x)
305+
return acts
306+
307+
a = make_actions()
308+
a[0](3) # 0
309+
a[2](2) # 4
310+
```
311+
312+
313+
# Zakresy
314+
315+
```python
316+
def tester(start):
317+
state = start
318+
def nested(label):
319+
nonlocal state
320+
print(label, state)
321+
state += 1
322+
return nested
323+
324+
f = tester(0)
325+
f('a') # a 0
326+
f('b') # b 1
327+
```
328+
329+
330+
# Zakresy
331+
332+
Zmienne nielokalne muszą istnieć w zakresie zawierającym. Zmienne globalne nie muszą istnieć przy ich deklarowaniu.
333+
334+
335+
# Argumenty
336+
337+
Podstawy przekazywania argumentów:
338+
339+
- Argumenty przekazywane są automatyczne przypisanie obiektów do nazw zmiennych lokalnych.
340+
- Przypisania do nazw argumentów wewnątrz funkcji nie wpływa na wywołującego.
341+
- Modyfikacja zmiennego obiektu argumentu w funkcji może mieć wpływ na wywołującego.
342+
343+
344+
# Argumenty
345+
346+
```python
347+
def f(a):
348+
a = 99
349+
350+
b = 88
351+
f(b)
352+
print(b) # 88
353+
```
354+
355+
356+
# Specjalne tryby dopasowania argumentów
357+
358+
Tryby dopasowania:
359+
360+
- Pozycyjne: dopasowanie od lewej do prawej strony
361+
- Słowa kluczowe: dopasowanie po nazwie argumentu
362+
- Wartości domyślne: określenie wartości dla argumentów, które nie zostały przekazane
363+
- Nieznana liczba argumentów (zbieranie): zebranie dowolnej liczby argumentów zgodnie z pozycją lub słowem kluczowym
364+
- Argumenty mogące być tylko słowami kluczowymi: argumenty, które muszą być przekazywane przez nazwę
365+
366+
367+
# Składnia dopasowania
368+
369+
| Składnia | Interpretacja |
370+
|---|---|
371+
| func(wartosc) | Normalny argument - dopasowanie po pozycji |
372+
| func(nazwa=wartosc) | Słowo kluczowe - dopasowani po nazwie |
373+
| func(*sekwencja) | Przekazanie sekwencji jako argumenty pozycyjne |
374+
| func(**słownik) | Przekazanie par klucz-wartość |
375+
376+
377+
# Składnia dopasowania
378+
379+
| Składnia | Interpretacja |
380+
|---|---|
381+
| def func(nazwa) | Normalny argument |
382+
| def func(nazwa=wartosc) | Domyślna wartość argumentu |
383+
| def func(*nazwa) | Dopasowanie sekwencji |
384+
| def func(**nazwa) | Dopasowanie słownika |
385+
| def func(*args, nazwa) | Argument wymuszony jako słowo kluczowe |
386+
| def func(*, nazwa) | Jedynie wymuszone argumenty kluczowe |
387+
388+
389+
# Składnia i dopasowania
390+
391+
```python
392+
def func(arg0, /, arg1, *args, **kwargs, kwonly):
393+
pass
394+
```

0 commit comments

Comments
(0)

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