Skip to content

Commit a0fe72d

Browse files
encukouhroncok
authored andcommitted
beginners/def: Further explanation on leaving out I/O from functions
1 parent 4a8f45b commit a0fe72d

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

lessons/beginners/def/index.md

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ Předchozí program se dá napsat i takto:
121121
from math import pi
122122

123123
def obsah_elipsy(a, b):
124-
print('Obsah je', pi * a * b)
124+
print('Obsah je', pi * a * b) # Pozor, `print` místo `return`!
125125

126126
obsah_elipsy(3, 5)
127127
```
@@ -140,6 +140,37 @@ print(objem_eliptickeho_valce(3, 5, 3))
140140

141141
... ale kdyby výsledek přímo vypsala, nešlo by to.
142142

143+
Další důvod, proč hodnoty spíš vracet než vypisovat, je ten, že jedna funkce se
144+
dá použít v různých situacích.
145+
Funkci s `print` by nešlo rozumně použít tehdy, když nás příkazová
146+
řádka vůbec nezajímá.
147+
Třeba v grafické hře, webové aplikaci, nebo pro ovládání robota.
148+
149+
Podobně je to se vstupem: když použiju v rámci své funkce `input`, bude se
150+
moje funkce dát použít jen v situacích, kdy je u počítače klávesnice a za ní
151+
člověk.
152+
Proto je lepší funkcím potřebné informace předávat jako argumenty
153+
a `input` (nebo textové políčko či měření z čidla robota) nemít ve funkci,
154+
ale vně:
155+
156+
```python
157+
from math import pi
158+
159+
def obsah_elipsy(a, b):
160+
"""Vrátí obsah elipsy s poloosami daných délek"""
161+
# Jen samotný výpočet:
162+
return pi * a * b
163+
164+
# print a input jsou "venku":
165+
x = input('Zadej délku poloosy 1: ')
166+
y = input('Zadej délku poloosy 2: ')
167+
print('Obsah je', obsah_elipsy(x, y))
168+
```
169+
170+
Samozřejmě existují výjimky: funkce která přímo vytváří textový výpis,
171+
může používat `print`; funkce která načítá textové informace zase `input`.
172+
Když ale funkce něco počítá, je dobré v ní `print` ani `input` nemít.
173+
143174

144175
## None
145176

0 commit comments

Comments
 (0)