Cela est apparu dans Fonctionnalités cachées de Python , mais je ne vois pas de bonne documentation ou d'exemples qui expliquent comment la fonctionnalité fonctionne.
Vous l'utiliseriez dans votre propre classe, car aucune classe intégrée ne l'utilise.
Numpy l'utilise, comme indiqué dans la documentation . Quelques exemples ici .
Dans votre propre classe, vous l'utiliseriez comme ceci:
>>> 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
Bien sûr, il y a documentation python , et référence du langage . Mais ce n'est pas très utile.
L'ellipse est utilisée pour découper des structures de données de dimension supérieure.
Il est conçu pour signifier à ce stade, insérez autant de tranches complètes (:
) pour étendre la tranche multidimensionnelle à toutes les dimensions .
Exemple:
>>> from numpy import arange
>>> a = arange(16).reshape(2,2,2,2)
Maintenant, vous avez une matrice à 4 dimensions d'ordre 2x2x2x2. Pour sélectionner tous les premiers éléments de la 4e dimension, vous pouvez utiliser la notation Ellipsis
>>> a[..., 0].flatten()
array([ 0, 2, 4, 6, 8, 10, 12, 14])
ce qui équivaut à
>>> a[:,:,:,0].flatten()
array([ 0, 2, 4, 6, 8, 10, 12, 14])
Dans vos propres implémentations, vous êtes libre d'ignorer le contrat mentionné ci-dessus et de l'utiliser comme bon vous semble.
C'est une autre utilisation d'Ellipsis, qui n'a rien à voir avec les tranches: je l'utilise souvent en communication intra-thread avec des files d'attente, comme une marque qui signale "Terminé"; il est là, c'est un objet, c'est un singleton, et son nom signifie "manque de", et ce n'est pas le sur-utilisé None (qui pourrait être mis dans une file d'attente dans le cadre d'un flux de données normal). YMMV.
Comme indiqué dans d'autres réponses, il peut être utilisé pour créer des tranches. Utile lorsque vous ne souhaitez pas écrire de nombreuses notations de tranches complètes (:
), ou lorsque vous n'êtes pas sûr de la dimensionnalité du tableau manipulé.
Ce que je pensais important de souligner, et qui manquait dans les autres réponses, c'est qu'il peut être utilisé même lorsqu'il n'y a plus de dimensions à remplir.
Exemple:
>>> from numpy import arange
>>> a = arange(4).reshape(2,2)
Cela entraînera une erreur:
>>> a[:,0,:]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: too many indices for array
Cela fonctionnera:
a[...,0,:]
array([0, 1])