Quel est le Python points de suspension objet?
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
notez que le
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
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 avec Ellipsis
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
OriginalL'auteur Salim Fadhley | 2009-04-21
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...
.il est également utilisé dans PEP484 type hinting dans des fichiers stub
OriginalL'auteur Brian
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.Python a aussi le
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)Ce n'est pas littérale. C'est juste un nom. Par exemple
NotImplemented = 'something_else'
est valable python, mais... = 'something_else'
est une erreur de syntaxe.Que faire si une exception s'est produite lors de l'importation de ce module? 🙂
n'est pas destiné à être une alternative à
None
. Son utilisation est assez étroite. Voir la documentation de iciOriginalL'auteur tzot
Vous pouvez également utiliser les points de suspension lors de la spécification devrait doctest de sortie:
Je dirais qu'il n', comme indiqué dans le doctest.Points de suspension. J'attends que la plupart, si pas toutes les utilisations de
...
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?OriginalL'auteur Chiggs
De 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:
OriginalL'auteur phoenix
De la La documentation Python:
OriginalL'auteur Simon Lieschke
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 valableOriginalL'auteur Matthew D. Scholefield
Vous 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?
OriginalL'auteur sykora
__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.
OriginalL'auteur Ciro Santilli 新疆改造中心996ICU六四事件
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.En fait, il le fait dans un petit chemin - Python
__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.Eh bien, il est vrai que le design original de sorte entend. Il a également l'intention
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.)OriginalL'auteur Aseem Bansal
Comme mentionné par @noɥʇʎԀʎzɐɹƆ et @phoenix - en effet, Vous pouvez l'utiliser dans des fichiers stub. par exemple,
class Foo:
bar: Any = ...
def __init__(self, name: str=...) -> None: ...
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
OriginalL'auteur henryJack