print("Ahoj PyCone!")
print
print("Jak se máte?")
Ahoj PyCone! Jak se máte?
cislo = 10
def moje_nova_funkce(a, b):
soucet = a + b
return soucet
print(dir(cislo))
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
print(f"""
Číslo {cislo} má binární reprezentaci {bin(cislo)}.
Počet bitů potřebných k zápisu: {cislo.bit_length()}.
Celkový počet jedniček v binárním zápisu: {cislo.bit_count()}
""")
Číslo 10 má binární reprezentaci 0b1010. Počet bitů potřebných k zápisu: 4. Celkový počet jedniček v binárním zápisu: 2
print(dir(moje_nova_funkce))
['__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
print(f"""
Funkce:
- se jmenuje: {moje_nova_funkce.__name__},
- má {moje_nova_funkce.__code__.co_argcount} argumenty,
- pracuje s těmito konstantami: {moje_nova_funkce.__code__.co_consts},
- a lokálními proměnnými: {moje_nova_funkce.__code__.co_varnames}.
""")
Funkce: - se jmenuje: moje_nova_funkce, - má 2 argumenty, - pracuje s těmito konstantami: (None,), - a lokálními proměnnými: ('a', 'b', 'soucet').
funkce = print
funkce("Ahoj!")
Ahoj!
seznam = []
seznam.append(funkce)
seznam[0]("Ahoj")
Ahoj
slovnik = {}
slovnik["skryty print"] = funkce
slovnik["skryty print"]("Ahoj")
Ahoj
def aplikuj(funkce, seznam):
novy_seznam = []
for x in seznam:
novy_seznam.append(funkce(x))
return novy_seznam
def absolutni_hodnota(a):
if a < 0:
return -a
else:
return a
aplikuj(absolutni_hodnota, [-1, 3, 4, -5, -8])
[1, 3, 4, 5, 8]
map(abs, [-1, 3, 4, -5, -8])
<map at 0x7f237c147e20>
list(map(abs, [-1, 3, 4, -5, -8]))
[1, 3, 4, 5, 8]
def je_sude(x):
if x % 2 == 0:
return True
else:
return False
filter(je_sude, [1, 2, 3, 4, 5])
<filter at 0x7f237c147c70>
list(filter(je_sude, [1, 2, 3, 4, 5]))
[2, 4]
from functools import reduce
def secti(a, b):
return a + b
reduce(secti, [1, 2, 3, 4, 5])
15
def obracena_hodnota(x):
"""Vrátí obrácenou hodnotu čísla."""
return -x
list(
map(
obracena_hodnota,
[-1, 3, 4, -5, -8]
)
)
[1, -3, -4, 5, 8]
list(
map(
lambda x: -x,
[-1, 3, 4, -5, -8]
)
)
[1, -3, -4, 5, 8]
def secti(a, b):
return a + b
print(f"Součet je {secti(2, 3)}")
secti = lambda a, b: a + b
print(f"Součet je {secti(2, 3)}")
Součet je 5 Součet je 5
list(
map(
lambda x: x if x >= 0 else -x, # ← !!!
[-1, 3, 4, -5, -8]
)
)
[1, 3, 4, 5, 8]
list(
filter(
lambda x: x % 2 == 0, # ← !!!
[1, 2, 3, 4, 5]
)
)
[2, 4]
reduce(
lambda x, y: x + y, # ← !!!
[1, 2, 3, 4, 5]
)
15
def vrat_funkci_pro_nasobeni(x):
def funkce_pro_nasobeni(y):
return x * y
return funkce_pro_nasobeni
vynasob_peti = vrat_funkci_pro_nasobeni(5)
vynasob_peti(3)
15
def loguj(puvodni_funkce):
def nova_funkce(x, y):
print(f"Volám funkci {puvodni_funkce.__name__} s argumenty {x} a {y}.")
vysledek = puvodni_funkce(x, y)
print(f"Výsledek je {vysledek}.")
return vysledek
return nova_funkce
def secti(a, b):
return a + b
nova_secti = loguj(secti)
nova_secti(3, 4)
Volám funkci secti s argumenty 3 a 4. Výsledek je 7.
7
@loguj
def vynasob(a, b):
return a * b
vynasob(3, 4)
Volám funkci vynasob s argumenty 3 a 4. Výsledek je 12.
12
map
, filter
a reduce
jsou super a měly by se používat častěji.