A quoi sert Ellipsis en Python ?

A quoi sert Ellipsis en Python ?

Cet article appartient à l’ancien propriétaire du site web, nous n’en sommes pas les créateurs et n’en tireront aucune rémunération. L’article est posté à titre d’hommage a Sametmax.com et ce qu’ils ont apportés à la communauté.

A rien.

Nan mais revenez, je déconnais.

Mais, sérieusement, Ellipsis, à la base, ne sert à rien.

Il existe, c’est tout.

En Python 2:

>>> Ellipsis Ellipsis >>> … # pas de forme abrégée File « <stdin> », line 1 … ^ SyntaxError: invalid syntax >>> range(10)[…] # mais ceci n’est pas une syntaxe error Traceback (most recent call last): File « <stdin> », line 1, in <module> TypeError: range indices must be integers or slices, not ellipsis >>> str(Ellipsis) ‘Ellipsis’ >>> Ellipsis() # ce truc ne sert à rien Traceback (most recent call last): File « <stdin> », line 1, in <module> TypeError: ‘ellipsis’ object is not callable >>> Ellipsis + Ellipsis # a rien je vous dis Traceback (most recent call last): File « <stdin> », line 1, in <module> TypeError: unsupported operand type(s) for +: ‘ellipsis’ and ‘ellipsis’ >>> Ellipsis is Ellipsis # c’est un singleton True >>> bool(Ellipsis) # c’est comme None, mais en True True

En Python 3:

>>> … Ellipsis

Comme je vous le disais, ça ne sert à rien.

Du coup on peut en faire ce qu’on veut ! It’s toasted !

Les libs comme NumPy s’en servent pour faire du slicing étendu. Elles ré-implementent __getitem__ et quand elles voient Ellipsis, elles interprètent ça comme un “:” pour toutes les dimensions non spécifiées.

Il y a des gens qui l’utilisent en lieu et place de pass pour dire “j’écrirai ce truc plus tard”:

def fonction_optionelle(): …

Bien entendu, ça ne marche qu’en Python 3.

Personnellement je m’en sers comme valeur quand j’ai besoin d’un truc neutre qui ne soit pas None si None peut être une valeur attendue. Au final quand on veut faire propre, il vaut mieux faire un objet dédié qui s’appelle NotAValue ou autre, mais le quick and dirty a la vie dure.

Attention, les références récursives sont signalées par le shell Python comme ..., mais ça n’a rien à avoir avec la choucroute :

>>> l = [] >>> l.append(l) >>> l [[…]]
sam artois

A propos de l'auteur

Samuel Artois est un développeur Python passionné d'automatisation et de marketing. Depuis plusieurs années, il a développé une expertise solide dans ces domaines et a su mettre ses compétences en pratique sur de nombreux projets.

Laisser un commentaire