Categories: BlogJinéKurz Python

Pokročilé funkce v Pythonu. Část 8 Python kurzu od začátečníka po pokročilého ve 11 blogových příspěvcích

Článek pomůže čtenáři navázat na předchozí blog o funkcích v Pythonu spolu s některými základními aplikacemi v reálném světě. Jako náš editor kódu budeme používat Visual Studio Code. Pokud jste si Visual Studio Code ještě nenainstalovali, pokyny jsou uvedeny v prvním blogu.

Pokročilé funkce v Pythonu – obsah:

  1. Předávání funkcí jiným funkcím
  2. Používání funkcí uvnitř funkce
  3. *Args v Pythonu
  4. “*” operátor v Pythonu
  5. **kwargs v Pythonu

Předávání funkcí jiným funkcím

Jak bylo diskutováno v předchozím blogu, funkce v Pythonu jsou považovány za objekty. Takže stejně jako objekty v Pythonu, mohou být funkce také předávány jako argumenty jiné funkci.

Například:

def mul(x, y):
    return x*y
 
 
def add(mul, y):
    return mul+y
 
 
x = add(mul(9, 10), 10)
print(x)

V uvedeném bloku kódu je vidět, že funkce mul je předána jako argument funkci add a je uložena do proměnné x, která je poté vytištěna pro ověření odpovědi.

100

Používání funkcí uvnitř funkce

V Pythonu můžeme definovat funkci uvnitř jiné funkce. Tyto funkce se nazývají vnořené funkce. Ale v tomto případě nemůže být vnitřní funkce nebo vnořená funkce volána samostatně. Oba příklady jsou ilustrovány v následujícím bloku kódu.

Pojďme napsat naši první funkci.

def mul(x, y):
 
    m = x*y
 
    def square(m):
        return m*m
 
    return square(m)
 
 
x = mul(9, 10)
 
print(x)
Výstup:
8100

V uvedeném bloku kódu je vnější funkcí “mul”, která vrací funkci square, jež přijímá argument “m”, což je násobení dvou argumentů předaných funkci “mul”. Spuštění kódu začíná voláním funkce “mul”, poté se produkt “x” a “y” uloží do proměnné “m”. Jak tato funkce vrací funkci square, je volána funkce “square” a konečný produkt, což je čtverec “m”, je vrácen.

Pojďme se naučit několik důležitých věcí v Pythonu, které učiní vaši cestu programováním v Pythonu mnohem lepší.

*Args v Pythonu

To jsou argumenty, které používáme jako parametry funkcí. Pojďme napsat obvyklou funkci pomocí toho, co jsme se dosud naučili. Napišeme funkci, která nám může poskytnout maximální plochu obdélníku, přičemž jako parametry funkce použijeme 2 plochy obdélníků.

def maxarea(a, b):
    if a > b:
        return f'obdélník a má větší plochu, která je {a}'
    else:
        return f'obdélník a má větší plochu, která je {b}'
 
 
x = maxarea(100, 60)
print(x)
 
Výstup:
obdélník a má větší plochu, která je 100

Tato funkce je dobrá pro 2 parametry nebo argumenty, ale co když potřebujeme porovnat více než 2 plochy. Jeden přístup by byl předat seznam ploch do funkce.

def maxarea(lis):
 
    max = 0
    for i in lis:
        if i > max:
            max = i
 
    return f"obdélník, který má větší plochu, je {max}"
 
 
x = maxarea([100, 60, 50])
print(x)
Výstup:
obdélník, který má větší plochu, je 100

Tento přístup je dobrý, ale měli bychom znát počet parametrů nebo argumentů předem. Při reálném provádění kódu by to bylo obtížné. Proto, aby se programátorům usnadnil život, Python používá *args a **kwargs.

“*” operátor v Pythonu

Tento operátor je operátor pro rozbalení, který se obvykle používá k předání neurčitého počtu parametrů nebo argumentů.

Rozbalení argumentů do n-tice pomocí * operátoru

Jak jsme viděli, operátor “*” se používá k rozbalení hodnot. Příklad je ilustrován níže.


x = [1, 2, 3, 4]
y = [5, 6, 7, 8]
 
z = *x, *y
 
print(type(z))
print(z)
Výstup:
<class 'tuple'>
(1, 2, 3, 4, 5, 6, 7, 8)

Jak vidíme, operátor pro rozbalení rozbalil seznam x a seznam y do n-tice, což je z. Můžeme také vidět, že výsledek je n-tice.

Pojďme napsat stejnou funkci pomocí *Args.

def maxarea(*lis):
 
    max = 0
    for i in lis:
        if i > max:
            max = i
 
    return f"obdélník, který má větší plochu, je {max}"
 
 
x = maxarea(100, 60, 50, 200)
y = maxarea(100, 60, 50, 200, 9000)
z = maxarea(100, 60, 50, 20, 90)
print(x)
print(y)
print(z)
Výstup:
obdélník, který má větší plochu, je 200
obdélník, který má větší plochu, je 9000
obdélník, který má větší plochu, je 100

V tomto bloku kódu vidíme, že nyní jsou argumenty dynamické, můžeme přidat libovolný počet argumentů, které budou rozbaleny ve funkci maxarea, abychom získali požadovaný výsledek. Také můžeme porovnat libovolný počet ploch v tomto kontextu.

**kwargs v Pythonu

kwargs je jako args, ale přijímá poziční argumenty. Používá ** operátor, který má některé vlastnosti, jako je rozbalení více pozičních argumentů libovolné délky, může také rozbalit slovníky, může být také použit pro kombinování dvou slovníků.

Sloučení slovníků

a = {"h": 1, "n": 2}
b = {"m": 5, "l": 10}
 
c = {**a, **b}
 
print(type(c))
print(c)
 
Můžeme vidět z výše uvedeného kódu, že máme 2 slovníky a a b, které jsou sloučeny pomocí ** operátoru, aby daly další slovník.
Výstup:
 
<class 'dict'>
{'h': 1, 'n': 2, 'm': 5, 'l': 10}

Když použijeme * operátor místo ** operátoru, kód pro tento případ je ilustrován níže.

a = {"h": 1, "n": 2}
b = {"m": 5, "l": 10}
 
c = {*a, *b}
 
print(type(c))
print(c)
Výstup:
<class 'set'>
{'n', 'l', 'm', 'h'}

Proto, když je * operátor použit na dva slovníky pro sloučení, výstup bude množina pouze s klíči ze slovníku.

Funkce maxarea pomocí **kwargs je ilustrována v níže uvedeném bloku kódu.

def maxarea(**lis):
 
    max = 0
    for i in lis.values():
        if i > max:
            max = i
 
    return f"obdélník, který má větší plochu, je {max}"
 
 
x = maxarea(a=1, b=2, c=3)
y = maxarea(a=1, b=2)
z = maxarea(a=1, b=2, c=3, d=9)
print(x)
print(y)
print(z)
Výstup: obdélník, který má větší plochu, je 3 obdélník, který má větší plochu, je 2 obdélník, který má větší plochu, je 9 [/code>

V tomto blogu o pokročilých funkcích v Pythonu jsme pokryli témata jako předávání funkcí jiným funkcím, používání funkcí uvnitř funkce, *Args v Pythonu, “*” operátor v Pythonu, **kwargs v Pythonu a další. Další témata, která zahrnují třídy, budou pokryta v dalším blogovém příspěvku. Domácí úkol týkající se pokročilých funkcí v Pythonu je uveden níže.

Agnieszka Markowska-Szmaj

View all posts →

Agnieszka Markowska-Szmaj

Share
Published by
Agnieszka Markowska-Szmaj

Recent Posts

Co je analýza pracovních míst? 7 nejlepších technik pro provedení analýzy pracovních míst v řízení lidských zdrojů

Co je analýza pracovních míst? Už jste někdy slyšeli tento termín, víte, co musíte udělat,…

52 minutes ago

Top 10 editorů PDF v roce 2023

Soubory ve formátu PDF nás provázejí každý den. Tento univerzální způsob ukládání obsahu zaručuje neměnnou…

3 hours ago

Top 10 online překladačů v roce 2023

Vývoj internetu a strojového učení konečně odsunul tradiční objemné tištěné jazykové slovníky. Ať už hledáte…

5 hours ago

Rentgenové vyhledávání v náboru. 4 důležité operátory pro rentgenové vyhledávání

Rentgenové vyhledávání je jednou z mnoha technik vyhledávání dat, které používají oddělení lidských zdrojů k…

7 hours ago

5 Ověřené obchodní modely pro startupy

Dnes se zaměříme na počáteční fázi vývoje společnosti – start-upy. Pokusíme se zjistit, který obchodní…

9 hours ago

5 programů pro vytváření aplikací bez kódování – Vytvořte a prodávejte digitální produkty #37

Programy pro vytváření aplikací bez kódování – znáte nějaké z nich? Jak bylo ukázáno v…

11 hours ago