2022-11-08 18:10 Doba čtení: 24 min

42 Otázky a odpovědi pro rozhovory v Pythonu v reálném čase [2022]

Chystáte se na pohovor z programování v Pythonu? Nebo si jen přejete otestovat své znalosti tohoto jazyka? Není problém! V tomto článku se zaměříme na nejčastější otázky a odpovědi, které vám pomohou se připravit.

Tento článek vám poslouží jako průvodce, který vám pomůže porozumět typům otázek, na které můžete narazit při pohovoru. Můžete také otestovat své vlastní dovednosti v Pythonu. Než si přečtete odpovědi, zkuste si na otázky nejprve odpovědět sami, abyste mohli objektivně posoudit své znalosti. Bez zbytečného prodlužování, pojďme se podívat na otázky.

Otázky jsou strukturované do několika sekcí podle témat. V každé sekci najdete otázky spolu s vybranými odpověďmi. Odpovědi si můžete upravit do vlastního jazyka, pokud zachovají stejný význam, abyste při pohovoru nepůsobili jako někdo, kdo jen čte z papíru.

Základy jazyka Python

#1. Co je to Python?

Python je interpretovaný, univerzální programovací jazyk na vysoké úrovni. Díky rozsáhlé nabídce knihoven a frameworků třetích stran můžeme v Pythonu vytvářet téměř jakýkoliv typ aplikace. Python patří mezi nejpopulárnější jazyky v moderních technologiích, jako je umělá inteligence (AI) a datová věda.

#2. Jaký je hlavní rozdíl mezi interpretovaným a kompilovaným jazykem?

Interpretovaný jazyk překládá kód po jednotlivých příkazech do strojového kódu, zatímco kompilovaný jazyk překládá celý kód najednou do strojového kódu.

#3. Je Python staticky nebo dynamicky typovaný jazyk?

Python je dynamicky typovaný jazyk.

#4. Co znamená, že je jazyk dynamicky typovaný?

Dynamicky typované jazyky kontrolují typy proměnných až za běhu programu. Mezi dynamicky typované jazyky patří například Python, JavaScript nebo Ruby.

Bonus: Staticky typované jazyky, jako jsou C++, C nebo Java, kontrolují typy proměnných již při kompilaci.

#5. Uveďte několik příkladů použití Pythonu.

Python má snadno pochopitelnou syntaxi, která se podobá angličtině. Má obrovskou komunitu vývojářů a nabízí velké množství balíčků třetích stran pro různé typy vývoje aplikací. S Pythonem můžeme vytvářet webové aplikace, grafické (GUI) aplikace, aplikace pro příkazový řádek (CLI) a mnoho dalšího.

Jednou z nejpopulárnějších oblastí použití Pythonu je automatizace. Snadno můžeme v Pythonu psát skripty pro automatizaci různých úloh, jako je například čištění disku, rozesílání e-mailů nebo získávání dat o cenách produktů.

Python je také jedním z nejpoužívanějších jazyků v oblasti datové vědy.

#6. Jaké aplikace jste v Pythonu vytvořili vy?

Napsal jsem několik automatizačních skriptů, které mi pomáhají odstranit opakující se a nudné úkoly. A také skripty pro získávání informací o cenách produktů nebo jejich dostupnosti.

Pracoval jsem také s frameworky, jako je Django a Flask, při tvorbě webových aplikací. Některé webové aplikace jsem vytvořil pomocí Django i Flasku.

Poznámka: Výše uvedená odpověď je pouze příkladem. Vaše odpověď se může lišit. Snažte se popsat různé oblasti, ve kterých jste Python využívali. Pokud je to možné, uveďte i konkrétní aplikace.

Datové typy v Pythonu

#7. Jaké jsou vestavěné datové typy v Pythonu?

V Pythonu existuje několik vestavěných datových typů. Mezi ně patří: int, float, complex, bool, list, tuple, set, dict a str.

Poznámka: Nemusíte vyjmenovat všechny datové typy v Pythonu. Zmiňte ty, které nejčastěji používáte. Na základě vaší odpovědi může pohovorující klást další otázky.

#8. Jaký je rozdíl mezi seznamem (list) a n-ticí (tuple)?

Seznam i n-tice se používají k ukládání kolekcí objektů. Hlavní rozdíl je v tom, že „seznam je proměnlivý (mutable) objekt, zatímco n-tice je neměnný (immutable) objekt“.

#9. Co jsou proměnlivé a neměnné datové typy?

Proměnlivé datové typy lze po jejich vytvoření měnit. Mezi proměnlivé objekty v Pythonu patří například seznam (list), množina (set) nebo slovník (dict).

Neměnné datové typy nelze po jejich vytvoření změnit. Mezi neměnné objekty v Pythonu patří například řetězec (str) nebo n-tice (tuple).

#10. Popište některé metody seznamů.

1. append – Tato metoda se používá pro přidání prvku na konec seznamu.

>>> a = [1, 2]
>>> a.append(3)
>>> a
[1, 2, 3]

2. pop – Tato metoda se používá k odstranění prvku ze seznamu. Pokud nezadáme žádný index, odstraní poslední prvek. Pokud zadáme index, odstraní prvek na daném indexu.

>>> a = [1, 2, 3, 4, 5]
>>> a.pop()
5
>>> a
[1, 2, 3, 4]
>>> a.pop(1)
2
>>> a
[1, 3, 4]

3. remove – Tato metoda se používá k odstranění konkrétního prvku ze seznamu. Musíme zadat prvek jako argument, který chceme odstranit. Metoda odstraní první výskyt prvku v seznamu.

>>> a = [1, 2, 2, 3, 4]
>>> a = [1, 2, 3, 2, 4]
>>> a.remove(1)
>>> a
[2, 3, 2, 4]
>>> a.remove(2)
>>> a
[3, 2, 4]

4. sort – Tato metoda se používá k seřazení prvků seznamu vzestupně nebo sestupně.

>>> a = [3, 2, 4, 1]
>>> a.sort()
>>> a
[1, 2, 3, 4]
>>> a.sort(reverse=True)
>>> a
[4, 3, 2, 1]

5. reverse – Tato metoda se používá k obrácení pořadí prvků v seznamu.

>>> a = [3, 2, 4, 1]
>>> a.reverse()
>>> a
[1, 4, 2, 3]

Poznámka: Existují i další metody, jako je clear, insert, count atd. Nemusíte popisovat všechny metody seznamu. Stačí popsat dvě nebo tři metody, které nejčastěji používáte.

#11. Popište některé metody řetězců.

1. split – Tato metoda se používá k rozdělení řetězce v určených místech a vrací seznam. Ve výchozím nastavení rozděluje řetězec podle mezer. Můžeme také zadat oddělovač jako argument.

>>> a = "Tohle je web"
>>> a.split()
['Tohle', 'je', 'web']
>>> a = "1, 2, 3, 4, 5, 6"
>>> a.split(", ")
['1', '2', '3', '4', '5', '6']

2. join – Tato metoda se používá ke spojení seznamu řetězců. Spojí řetězce pomocí oddělovače, který zadáme.

>>> a = ['Tohle', 'je', 'web']
>>> ' '.join(a)
'Tohle je web'
>>> ', '.join(a)
'Tohle, je, web'

Poznámka: Mezi další metody řetězců patří: capitalize, isalnum, isalpha, isdigit, lower, upper, center atd.

#12. Co je to negativní indexování v seznamech?

Index se používá pro přístup k prvkům seznamu. Normální indexování začíná od 0.

Negativní indexování se také používá pro přístup k prvkům seznamu. Umožňuje nám přístup k indexům od konce seznamu. Začátek negativního indexování je -1, a postupně se zvyšuje -2, -3, -4 atd., až do délky seznamu.

>>> a = [1, 2, 3, 4, 5]
>>> a[-1]
5
>>> a[-3]
3
>>> a[-5]
1

#13. Popište některé metody slovníků.

1. items – Tato metoda vrací páry klíč:hodnota slovníku jako seznam n-tic.

>>> a = {1: 'web', 2: 'Nástroje', 3: 'Online kompilátor'}
>>> a.items()
dict_items([(1, 'web'), (2, 'Nástroje'), (3, 'Online kompilátor')])

2. pop – Tato metoda se používá k odstranění páru klíč:hodnota ze slovníku. Přijímá klíč jako argument a odstraní jej ze slovníku.

>>> a = {1: 2, 2: 3}
>>> a.pop(2)
3
>>> a
{1: 2}

Poznámka: Mezi další metody slovníků patří: get, keys, values, clear atd.

#14. Co je to krájení (slicing) v Pythonu?

Krájení se používá pro přístup k podmnožině dat ze sekvenčních datových typů. Vrací data na základě zadaných argumentů. Vrácený datový typ je stejný jako zdrojový.

Krájení přijímá tři argumenty: počáteční index, koncový index a krok (přírůstek). Syntaxe krájení je variable[start:end:step]. Argumenty nejsou povinné. Můžete zadat prázdnou dvojtečku (:), která vrátí všechna data.

>>> a = [1, 2, 3, 4, 5]
>>> a[:]
[1, 2, 3, 4, 5]
>>> a[:3]
[1, 2, 3]
>>> a[3:]
[4, 5]
>>> a[0:5:2]
[1, 3, 5]

#15. Na které datové typy můžeme použít krájení?

Krájení můžeme použít na datové typy list, tuple a str.

#16. Co jsou operátory rozbalení (unpacking) v Pythonu? Jak se používají?

Operátory * a ** jsou operátory rozbalení v Pythonu.

Operátor rozbalení * se používá k přiřazení více hodnot z sekvenčních datových typů k různým proměnným najednou.

>>> items = [1, 2, 3]
>>> a, b, c = items
>>> a
1
>>> b
2
>>> c
3
>>> a, *b = items
>>> a
1
>>> b
[2, 3]

Operátor rozbalení ** se používá s datovými typy dict. Rozbalování ve slovnících nefunguje stejně jako rozbalování sekvenčních datových typů.

Rozbalování ve slovnících se nejčastěji používá ke kopírování párů klíč:hodnota z jednoho slovníku do druhého.

>>> a = {1:2, 3:4}
>>> b = {**a}
>>> b
{1: 2, 3: 4}
>>> c = {3:5, 5:6}
>>> b = {**a, **c}
>>> b
{1: 2, 3: 5, 5: 6}

Poznámka: Další informace o těchto operátorech naleznete v dokumentaci.

Podmínky a cykly

#17. Má Python příkaz switch?

Ne, Python nemá příkaz switch.

#18. Jak implementujete funkčnost příkazu switch v Pythonu?

Funkčnost příkazu switch můžeme implementovat pomocí příkazů if a elif.

>>> if a == 1:
...     print(...)
... elif a == 2:
...     print(....)

#19. Co jsou příkazy break a continue?

break – Příkaz break se používá k ukončení běžící smyčky. Provádění programu přeskočí na vnější stranu přerušené smyčky.

>>> for i in range(5):
...     if i == 3:
...             break
...     print(i)
...
0
1
2

continue – Příkaz continue se používá k přeskočení zbytku kódu v aktuální iteraci. Kód za příkazem continue se v aktuální iteraci neprovede a provádění přejde do další iterace.

>>> for i in range(5):
...     if i == 3:
...             continue
...     print(i)
...
0
1
2
4

#20. Kdy se spustí kód v bloku else u smyček while a for?

Kód uvnitř bloku else u smyček while a for se provede po dokončení všech iterací. Kód uvnitř bloku else se nespustí, pokud smyčku přerušíme pomocí příkazu break.

#21. Co jsou to list comprehension a dict comprehension?

List comprehension a dict comprehension jsou zjednodušené zápisy pro smyčky for.

>>> a = [i for i in range(10)]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a = {i: i + 1 for i in range(10)}
>>> a
{0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}
>>>

#22. Jak funguje funkce range?

Funkce range vrací sekvenci čísel od počátku do konce s daným krokem. Syntaxe funkce range je range(start, stop[, step]).

Argument stop je povinný. Argumenty start a step jsou volitelné. Výchozí hodnoty start a step jsou 0 a 1.

>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(1, 10))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(1, 10, 2))
[1, 3, 5, 7, 9]
>>>

Funkce

#23. Co jsou parametry a argumenty?

Parametry jsou názvy uvedené v definici funkce.

Argumenty jsou hodnoty, které se funkci předávají při jejím volání.

#24. Jaké jsou různé typy argumentů v Pythonu?

Existují čtyři hlavní typy argumentů: poziční argumenty, výchozí argumenty, klíčové argumenty a libovolné argumenty.

Poziční argumenty: Jsou to standardní argumenty, které definujeme ve vlastních funkcích. Při volání funkce jsou vyžadovány všechny poziční argumenty.

>>> def add(a, b):
...     return a + b
...
>>> add(1, 2)
3
>>> add(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: add() missing 1 required positional argument: 'b'
>>>

Výchozí argumenty: Můžeme zadat výchozí hodnotu argumentu přímo v definici funkce. Pokud uživatel nezadá hodnotu argumentu, funkce použije výchozí hodnotu.

>>> def add(a, b=3):
...     return a + b
...
>>> add(1, 2)
3
>>> add(1)
4

Klíčové argumenty: Při volání funkce můžeme zadat název argumentu a přiřadit mu hodnotu. Klíčové argumenty nám pomáhají vyhnout se pořadí, které je vyžadováno u pozičních argumentů.

>>> def add(a, b):
...     print("a ", a)
...     print("b ", b)
...     return a + b
...
>>> add(b=4, a=2)
a  2
b  4
6

Libovolné argumenty: Používáme je, když neznáme počet argumentů, které funkce získá. K sesbírání argumentů používáme operátory * a ** v definici funkce.

>>> def add(*args):
...     return sum(args)
...
>>> add(1, 2, 3, 4, 5)
15
>>> def dict_args(**kwargs):
...     print(kwargs)
...
>>> dict_args(a="web", b='Nástroje', c="Online kompilátor")
{'a': 'web', 'b': 'Nástroje', 'c': 'Online kompilátor'}

#25. Co je to lambda funkce?

Lambda funkce jsou malé anonymní funkce v Pythonu. Mají jednoduché výrazy a mohou přijímat více argumentů.

>>> add = lambda a, b: a + b
>>> add(1, 3)
4

#26. Jaký je rozdíl mezi normální funkcí a lambda funkcí?

Funkcionalita normálních i lambda funkcí je podobná. Nicméně pro stejnou funkčnost musíme v normálních funkcích napsat více kódu než u lambda funkcí.

Lambda funkce jsou vhodné, když potřebujeme jediný výraz.

#27. K čemu se používá klíčové slovo pass?

Klíčové slovo pass se používá k označení prázdného bloku kódu. Python nám nedovoluje ponechat bloky prázdné, proto nám pass umožňuje definovat prázdné bloky (když se rozhodneme kód doplnit později).

>>> def add(*args):
...
...
  File "<stdin>", line 3

    ^
IndentationError: expected an indented block
>>> def add(*args):
...     pass
...
>>>

#28. Co je to rekurzivní funkce?

Funkce, která volá sama sebe, se nazývá rekurzivní funkce.

Co jsou operátory balení (packing) v Pythonu? Jak se používají?

Operátory balení se používají k sesbírání více argumentů ve funkcích. Nazývají se také libovolné argumenty.

Poznámka: Další informace o operátorech balení v Pythonu naleznete v dokumentaci.

OOP v Pythonu

#29. Jaké klíčové slovo se používá k vytváření tříd v Pythonu?

Klíčové slovo class se používá k vytváření tříd v Pythonu. Podle průmyslového standardu bychom měli při pojmenovávání tříd v Pythonu dodržovat PascalCase.

>>> class Auto:
...     pass
...

#30. Jak vytvoříme instanci třídy v Pythonu?

Instanci třídy vytvoříme v Pythonu jednoduše jejím zavoláním jako funkce. Požadované atributy pro objekt můžeme předat stejným způsobem, jako předáváme argumenty funkcím.

>>> class Auto:
...     def __init__(self, barva):
...             self.barva = barva
...
>>> cervene_auto = Auto('červená')
>>> cervene_auto.barva
'červená'
>>> zelene_auto = Auto('zelená')
>>> zelene_auto.barva
'zelená'
>>>

#31. Co je to self v Pythonu?

self reprezentuje objekt třídy. Používá se pro přístup k atributům objektu a metodám uvnitř třídy pro konkrétní objekt.

#32. Co je metoda __init__?

__init__ je metoda konstruktoru, podobná konstruktorům v jiných OOP jazycích. Spustí se ihned po vytvoření objektu pro danou třídu. Používá se k inicializaci počátečních dat pro instanci.

#33. Co je to docstring v Pythonu?

Dokumentační řetězce (docstrings) se používají k dokumentování bloků kódu. Používají se také jako víceřádkové komentáře.

Docstringy v metodách třídy se používají k popisu toho, co daná metoda dělá. Můžeme zobrazit docstring metody pomocí funkce help.

>>> class Auto:
...     def __init__(self, barva):
...             self.barva = barva
...
...     def zmen_barvu(self, nova_barva):
...             """Tato metoda změní barvu auta"""
...             self.barva = nova_barva
...
>>> auto = Auto('červená')
>>> help(auto.zmen_barvu)
Help on method zmen_barvu in module __main__:

zmen_barvu(nova_barva) method of __main__.Auto instance
    Tato metoda změní barvu auta

>>>

#34. Co jsou dunder nebo magické metody?

Metody, které mají dvě podtržítka jako předponu i příponu, se nazývají dunder nebo magické metody. Používají se hlavně k přepsání metod. Mezi metody, které můžeme ve třídách přepsat, patří například __str__, __len__, __setitem__, __getitem__ atd.

>>> class Auto:
...     def __str__(self):
...             return "Toto je třída Auto"
...
>>> auto = Auto()
>>> print(auto)
Toto je třída Auto
>>>

Poznámka: Existuje mnoho dalších metod, které můžete přepsat. Hodí se, když chcete upravit kód do hloubky. Další informace najdete v dokumentaci.

#35. Jak implementujeme dědičnost v Pythonu?

Rodičovskou třídu můžeme předat jako argument podřízené třídě. A můžeme také volat metodu init rodičovské třídy v podřízené třídě.

>>> class Zvire:
...     def __init__(self, jmeno):
...             self.jmeno = jmeno
...
>>> class Zvire:
...     def __init__(self, jmeno):
...             self.jmeno = jmeno
...
...     def zobraz(self):
...             print(self.jmeno)
>>> class Pes(Zvire):
...     def __init__(self, jmeno):
...             super().__init__(jmeno)
...
>>> pejsek = Pes('Toby')
>>> pejsek.zobraz()
Toby
>>>

#36. Jak získáme přístup k rodičovské třídě z podřízené třídy v Pythonu?

Můžeme použít super(), které odkazuje na rodičovskou třídu v podřízené třídě. S jeho pomocí můžeme přistupovat k atributům i metodám.

Různé

#37. Jak v Pythonu používáme jednořádkové a víceřádkové komentáře?

Pro jednořádkové komentáře používáme znak hash (#). A pro víceřádkové komentáře používáme trojité jednoduché uvozovky ('''komentář''') nebo trojité dvojité uvozovky ("""komentář""").

#38. Co je to objekt v Pythonu?

V Pythonu je vše objektem. Všechny datové typy, funkce i třídy jsou objekty.

#39. Jaký je rozdíl mezi is a ==?

Operátor == se používá ke kontrole, zda mají dva objekty stejnou hodnotu. Operátor is se používá ke kontrole, zda dva objekty odkazují na stejné paměťové místo.

>>> a = []
>>> b = []
>>> c = a
>>> a == b
True
>>> a is b
False
>>> a is c
True
>>>

#40. Co je mělká a hluboká kopie?

Mělká kopie: Vytvoří přesnou kopii objektu bez změny referencí objektů. Zkopírovaný i původní objekt odkazují na stejné objekty. Změna jednoho objektu ovlivní i ten druhý.

Pro mělkou kopii se používá metoda copy z modulu copy.

>>> from copy import copy
>>> a = [1, [2, 3]]
>>> b = copy(a)
>>> a[1].append(4)
>>> a
[1, [2, 3, 4]]
>>> b
[1, [2, 3, 4]]

Hluboká kopie: Rekurzivně zkopíruje hodnoty původního objektu do nového objektu. Pro hlubokou kopii musíme použít krájení nebo funkci deepcopy z modulu copy.

>>> from copy import deepcopy
>>> a = [1, [2, 3]]
>>> b = deepcopy(a)
>>> a[1].append(4)
>>> a
[1, [2, 3, 4]]
>>> b
[1, [2, 3]]
>>> b[1].append(5)
>>> a
[1, [2, 3, 4]]
>>> b
[1, [2, 3, 5]]
>>>

#41. Co jsou to iterátory?

Iterátory jsou objekty v Pythonu, které si pamatují svůj stav iterace. Inicializují data pomocí metody __iter__ a vrací další prvek pomocí metody __next__.

Pro získání dalšího prvku z iterátoru musíme volat next(iterator). Datový typ sekvence můžeme převést na iterátor pomocí vestavěné metody iter.

>>> a = [1, 2]
>>> iterator = iter(a)
>>> next(iterator)
1
>>> next(iterator)
2
>>> next(iterator)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>>

#42. Co jsou to generátory?

Generátory jsou funkce, které vracejí iterátor jako objekt generátoru. Pro generování dat používají yield.

>>> def cisla(n):
...     for i in range(1, n + 1):
...             yield i
...
>>> _10 = cisla(10)
>>> next(_10)
1
>>>
Petra Kovářová
Autor
Czechia

Sleduje mobilní technologie, Android/iOS a praktické návody pro uživatele.

Předchozí článek
Jak skrýt zprávy na Instagramu
Další článek
Který byste si měli vybrat v roce 2022?