Jste zde

Méně známé skutečnosti o Pythonu: objekt výpustka (... alias Ellipsis)

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!

Přidat komentář