Pojawiło się to w Ukrytych funkcjach Pythona , ale nie widzę dobrej dokumentacji ani przykładów wyjaśniających, jak działa ta funkcja.
157
Ellipsis
lub ...
nie jest funkcją ukrytą, jest po prostu stałą. Jest zupełnie inny niż, powiedzmy, javascript ES6, gdzie jest częścią składni języka. Żadna wbudowana klasa ani konstrukcja języka Python go nie wykorzystują.
Tak więc składnia zależy wyłącznie od Ciebie lub kogoś innego, kto napisał kod, aby to zrozumieć.
Numpy go używa, jak stwierdzono w dokumentacji . Kilka przykładów tutaj .
W swojej własnej klasie używałbyś tego w następujący sposób:
>>> class TestEllipsis(object):
... def __getitem__(self, item):
... if item is Ellipsis:
... return "Returning all items"
... else:
... return "return %r items" % item
...
>>> x = TestEllipsis()
>>> print x[2]
return 2 items
>>> print x[...]
Returning all items
Oczywiście istnieje dokumentacja Pythona i odniesienie do języka . Ale to nie jest zbyt pomocne.
Wielokropek jest używany w numpy do wycinania bardziej wymiarowych struktur danych.
Ma to oznaczać w tym momencie wstawienie jak największej liczby pełnych plasterków (
:
), aby rozszerzyć wielowymiarowy plaster na wszystkie wymiary .Przykład :
Teraz masz 4-wymiarową macierz rzędu 2x2x2x2. Aby wybrać wszystkie pierwsze elementy w czwartym wymiarze, możesz użyć notacji wielokropka
co jest równoważne
We własnych implementacjach możesz zignorować powyższą umowę i używać jej do wszystkiego, co uznasz za stosowne.
źródło
a[:,:,:,0]
zwróci kopię ia[...,0]
zwróci „widok”, a nie kopię? Próbowałem uruchomićid()
z obiema wersjami i dla tablicy 3-dim:a[:,:,:, 0], a[:,:,:, 1], a[:,:,:, 2]
wszystkie mają różne identyfikatory, podczas gdy:a[..., 0], a[..., 1], a[..., 2]
wszystkie mają takie same identyfikatory.id()
zwraca tę samą wartość dla obu. Sprawdzanie również__array_interface__['data']
pokazuje ten sam adres pamięci.a[indexes, ...]
gdy a jest tablicą 1-wymiarową!Jest to kolejne zastosowanie wielokropka, które nie ma nic wspólnego z odcinkami: często używam go w komunikacji wewnątrz wątku z kolejkami, jako znacznika sygnalizującego „Gotowe”; jest tam, to obiekt, to jest singleton, a jego nazwa oznacza „brak”, a nie jest to nadużywany None (który mógłby zostać umieszczony w kolejce jako część normalnego przepływu danych). YMMV.
źródło
Jak stwierdzono w innych odpowiedziach, można go używać do tworzenia plasterków. Przydatne, gdy nie chcesz pisać wielu notacji z pełnymi wycinkami (
:
) lub gdy po prostu nie jesteś pewien, jaka jest wymiarowość manipulowanej tablicy.To, co uważałem za ważne, aby podkreślić, a czego brakowało w innych odpowiedziach, to fakt, że można go użyć nawet wtedy, gdy nie ma więcej wymiarów do wypełnienia.
Przykład:
Spowoduje to błąd:
To zadziała:
źródło