300 votes

Pourquoi "append" de Python n'est-il pas "push"?

Est-ce que quelqu'un sait pourquoi la fonction list.append Python n'est pas appelée list.push étant donné qu'il y a déjà un list.pop qui supprime et retourne le dernier élément (indexé à -1) list.append sémantique est compatible avec cette utilisation?

276voto

Andrew Dalke Points 7607

Parce que "append" existait bien avant que la "pop" a été pensé. Python 0.9.1 liste.ajouter au début de 1991. Par comparaison, voici le cadre d'une discussion sur comp.lang.python sur l'ajout de pop en 1997. Guido a écrit:

Pour implémenter une pile, on aurait besoin pour ajouter une liste.pop() primitive (et non, je ne suis pas contre cette sur la base d'un principe). liste.push() pourrait être ajouté pour la symétrie avec la liste.pop() mais je ne suis pas un grand fan de plusieurs noms pour la la même opération -- tôt ou tard vous allez lire le code qui utilise l'autre, de sorte que vous devez apprendre les deux, ce qui est plus de la charge cognitive.

Vous pouvez également voir qu'il discute l'idée de s'push/pop/mettre/pull doit être l'élément [0] ou après l'élément [-1], où il publie une référence à l'Icône de la liste:

Je continue de penser que tout cela est meilleur la gauche de la liste d'objets la mise en œuvre -- si vous avez besoin d'une pile, ou une file d'attente, avec notamment la sémantique, écrire un peu de classe que utilise une des listes

En d'autres termes, pour les piles mises en œuvre directement comme Python, les listes, ce qui prend déjà en charge rapide append(), et del liste[-1], il est logique que la liste.pop() par défaut sur le dernier élément. Même si d'autres langues le faire différemment.

Implicite est ici que la plupart des gens ont besoin de les ajouter à une liste, mais beaucoup moins d'avoir l'occasion de traiter des listes, comme les piles, c'est pourquoi la liste.ajouter venu dans beaucoup plus tôt.

14voto

Matt Ball Points 165937

Parce qu'il ajoute; il n'a pas le pousser. "En ajoutant" s'ajoute à la fin d'une liste, "poussant", ajoute à l'avant.

Pensez à une file d'attente de vs une pile.

http://docs.python.org/tutorial/datastructures.html

Edit: Pour reformuler ma deuxième phrase, plus exactement, "Ajoutant" très clairement implique l'ajout de quelque chose à la fin d'une liste, indépendamment de l'implémentation sous-jacente. Lorsqu'un nouvel élément est ajouté quand il est "poussé" est moins claire. Poussant sur une pile est de mettre quelque chose sur "haut", mais où il va en fait dans les données sous-jacentes de la structure dépend entièrement de la mise en œuvre. Sur l'autre main, poussant sur une file d'attente implique l'ajoutant à la fin.

11voto

JesperE Points 34356

Parce qu'il ajoute un élément à une liste? La pression est généralement utilisée pour désigner les piles.

10voto

Gyom Points 1004

Parce que "append" signifie intuitivement "ajouter à la fin de la liste". Si on l'appelait «pousser», on ne sait pas si on ajoute des choses à la queue ou en tête de liste.

7voto

Uri Points 50687

Pas une réponse officielle par tous les moyens (juste une supposition basée sur l'utilisation de la langue), mais Python vous permet d'utiliser des listes sous forme de piles (par exemple, la section 5.1.1 du tutoriel). Cependant, une liste est toujours d'abord une liste, de sorte que les opérations qui sont communs à la fois à l'utilisation de la liste (p. ex., ajout) plutôt que d'accumuler les conditions (c'est à dire, pousser). Depuis un pop opération qui n'est pas commune dans les listes (si 'removeLast" pourrait avoir été utilisé), ils ont défini un pop (), mais pas un push().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X