Quel est le Python points de suspension objet de faire?
Les bras croisés alors que le surf de l'espace de noms, j'ai remarqué un étrange objet qui a appelé "points de suspension", il ne semble pas d'être ou de faire quelque chose de spécial, mais il est disponible dans le monde entier builtin.
Après une recherche j'ai trouvé qu'il est utilisé dans certains obscure variante du découpage de la syntaxe par Numpy et Scipy... mais presque rien d'autre.
Était cet objet ajouté à la langue spécifiquement à l'appui de Numpy + Scipy? N'points de suspension ont aucun sens générique ou de l'utiliser à tout?
D:\workspace\numpy>python
Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> Ellipsis
Ellipsis
- Voir les réponses à stackoverflow.com/questions/752602/...
- Je l'ai trouvé comme ça: je suis entré dans
x=[];x.append(x);print(x)
, pour voir comment il a traité stringifying cyclique des objets. Il est retourné[[...]]
. J'ai pensé "je me demande ce qui se passe si je tape dans[[...]]
? Je pense qu'il lancerait une erreur de syntaxe. Au lieu de cela, il est retourné[[Ellipsis]]
. Python est tellement bizarre. La recherche Google qui a suivi m'a amené à cette page. - notez que le
...
dans récursive repr est juste un espace réservé et n'a aucun rapport avecEllipsis
- Sur une note de côté, point triple de l'importation signifie "importer à partir de deux paquets".
- Génial James Powell parler youtube.com/watch?v=65_-6kEAq58
- D. Scholefield juste une remarque ressemble points de suspension découpage syntaxe est limitée à des tableaux numpy/matrices, de ne pas python intégré dans la liste
- Je ne suis pas sûr que cela mérite d'être une réponse à cette question, mais j'aimerais en lire plus à ce sujet et j'ai du mal à trouver quoi que ce soit. (Au risque d'aller à l'extrême de la tangente, je viens de lancer un ModuleNotFound erreur de quelqu'un d'autre projet où ils utilisent le point triple pour une par rapport à l'importation. Le problème dans ce cas est que le module importé était un cython module et a besoin d'être compilé. Il m'a fallu les âges pour exclure une erreur avec le chemin parce que je ne comprenais pas le point triple.)
- C'est un point par niveau. Je vais trouver les docs officielles, si je peux. C'est certainement là quelque part. Ce serait une question légitime à mon avis, car les docs sont difficiles à trouver.
- stackoverflow.com/q/32395926/2988730. stackoverflow.com/q/1054271/2988730. Ces deux devrait tout expliquer, avec des liens vers les docs et de la PPE dans les réponses.
Vous devez vous connecter pour publier un commentaire.
Il en a été question dans un autre question récemment. Je vais élaborer sur mon réponse à partir de là:
Points de suspension est un objet qui peut apparaître dans la tranche de notation. Par exemple:
Son interprétation est purement jusqu'à ce que met en œuvre le
__getitem__
fonction et voitEllipsis
objets, mais son principal (et prévu) est l'utilisation dans le numérique python extension, ce qui ajoute un tableau multidimensionnel type. Depuis il y en a plusieurs dimensions, le découpage devient plus complexe que juste un début et de fin de l'index; il est utile d'être en mesure de découper en plusieurs dimensions. E. g., étant donné une matrice 4x4, la zone en haut à gauche seraient définis par la tranche[:2,:2]
:L'extension de ce en outre, des points de suspension est utilisé ici pour indiquer un espace réservé pour le reste de la matrice de dimensions non spécifiées. Pensez à elle comme indiquant la pleine tranche
[:]
pour toutes les dimensions dans l'espace il est placé, donc pour un tableau 3d,a[...,0]
est le même quea[:,:,0]
et pour 4d,a[:,:,:,0]
, de la même façon,a[0,...,0]
esta[0,:,:,0]
(avec toutefois de nombreux colons dans le moyen de faire le plein nombre de dimensions dans le tableau).Il est intéressant de noter, en python3, les points de suspension littéral (
...
) est utilisable en dehors de la tranche de la syntaxe, de sorte que vous pouvez réellement écrire:Autres que les différents types numériques, non, je ne pense pas que c'est utilisé. Pour autant que je suis au courant, il a été ajouté à titre purement numpy utiliser et n'a pas de soutien de base autres que la fourniture de l'objet et le correspondant de la syntaxe. L'objet, je n'ai pas besoin de cela, mais le littéral "..." de soutien pour les tranches a fait.
Ellipsis
mal. Il est clair que vous êtes censé l'utiliser comme ceci:a[Ellipsis,0]
, rien de tout cela ridicule...
.typing
module: par exemple,Callable[..., int]
pour indiquer un callable qui renvoie unint
sans spécification de la signature, ouTuple[str, ...]
pour indiquer une longueur variable homogène tuple de chaînes de caractères.En Python 3, vous pouvez utiliser les points de suspension littérale
...
comme un “nop” espace réservé pour le code:C'est pas magie; toute expression peut être utilisée à la place de
...
, par exemple:(Ne peut pas utiliser le mot “sanctionnés”, mais je peux dire que cette utilisation était pas outrightly rejeté par Guido.)
...
utilisé où les gens veulent indiquer quelque chose qu'ils ont l'intention de remplir plus tard (un 'todo' bloc vide) etpass
à dire un bloc destiné à n'ont pas de code.NotImplemented
littérale, ce qui est utile lorsque vous souhaitez que votre incomplète fonction pour renvoyer quelque chose de significatif (au lieu deNone
comme dans votre exemple). (Un autre cas d'utilisation: la mise en Œuvre des opérations arithmétiques)NotImplemented = 'something_else'
est valable python, mais... = 'something_else'
est une erreur de syntaxe.None
. Son utilisation est assez étroite. Voir la documentation de iciraise NotImplemented
était une chose dans py2De Python 3.5 et PEP484, la traduction littérale des points de suspension est utilisée pour désigner certains types d'un type statique vérificateur lors de l'utilisation de la en tapant module.
Exemple 1:
Exemple 2:
Vous pouvez également utiliser les points de suspension lors de la spécification devrait doctest de sortie:
...
sont syntaxique, et de ne pasuse
le réel de l'Ellipse de l'objet. N'est-il pas vraiment rien de plus qu'une pratique de nom pour un concept adaptable?De la La documentation Python:
Résumant ce que les autres ont dit, en tant que de Python 3, points de suspension est essentiellement une autre singleton constante similaire à
None
, mais sans un usage particulier. Les utilisations actuelles comprennent:Callable[..., int]
ouTuple[str, ...]
)Utilisations possibles pourraient inclure:
None
est une option valableVous pouvez utiliser les points de suspension vous-même, dans la coutume de découpage des situations comme numpy a fait, mais il n'a pas d'usage dans toute builtin classe.
Je ne sais pas s'il a été ajouté spécifiquement pour une utilisation dans numpy, mais je n'ai certainement pas vu utilisé ailleurs.
Voir aussi: Comment utiliser les points de suspension de découpage de la syntaxe de Python?
__getitem__
minimale...
exemple dans une classe personnaliséeQuand la magie de la syntaxe
...
est transmis à[]
dans une classe personnalisée,__getitem__()
reçoit unEllipsis
objet de classe.La classe peut ensuite faire ce qu'il veut avec cet objet Singleton.
Exemple:
Le Python intégré
list
classe choisit d'en donner la sémantique d'une plage, et de toute saine utilisation de celui-ci doit aussi, bien sûr.Personnellement, j'aurais juste rester loin de lui dans mon Api, et de créer une autre méthode explicite à la place.
Testé en Python 3.5.2 et 2.7.12.
Comme mentionné par @noɥʇʎԀʎzɐɹƆ et @phoenix - en effet, Vous pouvez l'utiliser dans des fichiers stub. par exemple,
Plus d'informations et des exemples d'utilisation de cette sélection peut être découvert ici https://www.python.org/dev/peps/pep-0484/#stub-files
Son utilisation ne sont pas seulement pour ces 3ème partie modules. Il n'est pas indiqué correctement dans la documentation Python (ou peut-être que je ne pouvais pas trouver que), mais le points de suspension
...
est effectivement utilisée dans Disponible dans au moins un endroit.Il est utilisé pour la représentation de l'infini des structures de données en Python. Je suis tombé sur cette notation, tout en jouant avec les listes.
Voir cette question pour plus d'info.
ellipsis
type et laEllipsis
objet. Représentant infini de structures de données avec le bouton de sélection est purement pour l'affichage, n'ayant rien à voir avecellipsis
type ouEllipsis
objet.__repr__
chaînes but d'être valide expressions Python - si ce n'était pas pour les points de suspension existant dans la langue comme il le fait, la représentation ne serait pas une expression valide.eval(repr(a))
but d'être égal àa
. Malheureusement, il est faux de temps en temps dans la pratique, même pour les types intégrés. Essayez ceci:a=[]; a.append(a); eval(repr(a))
.repr(a)
est[[...]]
, invalide expression en Python 2. (En Python 3, c'est valable, mais l'eval résultat est quelque chose de différent, encore contraire à l'intention initiale.)C'est équivalent.
...
est une constante définie à l'intérieur d'constantes intégrées
.