Python obsahuje řadu vestavěných objektů, které jsou unikátní. Mezi notoricky známé patří např. None
, True
či False
. Jedním z těch méně známých je výpustka (angl. ellipsis), zapsaná jako tři tečky (...
). V tomto příspěvku se dozvíte, o co jde a k čemu se tento objekt hodí.
Od Pythonu 3 je k dispozici vestavěný objekt zvaný výpustka (angl. ellipsis). Zapisuje se buď jako tři po sobě jdoucí tečky (...
) nebo jménem (Ellipsis
). Lze si jej vyzkoušet přímo v interpretu:
# $ python # Python 3.4.0 (default, Apr 27 2014, 23:33:09) >>> ... Ellipsis >>> Ellipsis Ellipsis >>> a = ... >>> print(a) Ellipsis >>> ... is Ellipsis True
V dokumentaci k Pythonu je zmíněn zde.
K čemu to je?
Vím o dvou případech, kdy se objekt výpustka používá.
Využití při tzv. slicingu
Jedná se o operaci získání určitých prvků ze seznamu/pole (angl. slicing). Určitě znáte něco takového:
>>> x = [0, 2, 4, 6, 8, 10] >>> x[1:4] [2, 4, 6]
Říkáme tím, že ze seznamu x
chceme prvky na indexech 1 až 3 (hodnota druhého indexu mínus jedna). Objekt výpustky se při této operaci využívá např. v knihovně NumPy, což je knihovna pro matematické výpočty v Pythonu. Příklad použití (převzat odtud):
>>> import numpy >>> z = numpy.arange(81).reshape(3, 3, 3, 3) >>> z[1, ..., 2] array([[29, 32, 35], [38, 41, 44], [47, 50, 53]])
Ony tři tečky znamenají, že se přeskočí všechny zbývající dimenze. Zjednodušuje to zápis. Detaily lze nalézt v dokumentaci.
Co je důležité poznamenat, tak při použití výpustky je nutné, aby to daný objekt podporoval. U standardního seznamu v Pythonu si s tím moc nepohrajete, protože nic takového nepodporuje.
Označení místa, kam by měl přijít kód
Když chcete v kódu znázornit místa, kam by měl v budoucnu přijít kód, můžete použít výpustku. Např.
def some_function(): ...
Toto byste si u drtivé většiny jiných jazyků dovolit nemohli :). V Pythonu se ale jedná o korektní kód.
Jiná využití symbolu výpustky
Kromě výše uvedených použití objektu výpustka se lze v Pythonu setkat s použitím symbolu tří teček v jiném smyslu, kdy již nejde o objekt výpustka jako takový, ale spíše o použití tří teček v rámci grafického znázornění.
Očekávaný výstup u doctestu
Symbol tří teček lze využít při specifikování očekávaného výstupu při použití doctestu
. Příklad:
#!/usr/bin/env python def print_script(): """Prints "Script: <script name> !". >>> print_script() Script: ... ! """ import sys print('Script:', sys.argv[0], '!') if __name__ == '__main__': import doctest doctest.testmod(optionflags=doctest.ELLIPSIS)
Říkáme tím, že na místě tří teček se může objevit cokoliv. Detaily viz dokumentace k doctest.ELLIPSIS
.
Tisk rekurzivních datových struktur na výstup
V Pythonu není problém vytvořit rekurzivní datovou strukturu. Např.
>>> x = [1, 2, 3] >>> x.append(x)
Když se ji pak pokusíme vytisknout, dostaneme
>>> print(x) [1, 2, 3, [...]]
Ony tři tečky jsou zde ve významu toho, že strukturu nelze vytisknout celou.
Pokud víte o dalších využitích tří teček v Pythonu, určitě se podělte v komentáři!