Qu'est-ce que je fais de mal ici ?
a = set().add(1)
print a # Prints `None`
J'essaie d'ajouter le nombre 1
à l'ensemble vide.
Qu'est-ce que je fais de mal ici ?
a = set().add(1)
print a # Prints `None`
J'essaie d'ajouter le nombre 1
à l'ensemble vide.
C'est une convention en Python que les méthodes qui mutent des séquences retournent None
.
Pensez-y :
>>> a_list = [3, 2, 1]
>>> print a_list.sort()
None
>>> a_list
[1, 2, 3]
>>> a_dict = {}
>>> print a_dict.__setitem__('a', 1)
None
>>> a_dict
{'a': 1}
>>> a_set = set()
>>> print a_set.add(1)
None
>>> a_set
set([1])
Certains peuvent considérer cette convention comme "une horrible erreur de conception en Python", mais la FAQ Conception et histoire donne le raisonnement derrière cette décision de conception (en ce qui concerne les listes) :
Pourquoi est-ce que
list.sort(
) renvoie la liste triée ?Dans les situations où la performance est importante, faire une copie de la liste juste pour la trier serait une perte de temps. Par conséquent,
list.sort()
trie les en place. Afin de vous rappeler ce fait, il ne retourne pas la liste triée. De cette façon, vous ne risquez pas de vous tromper et de accidentellement écraser une liste lorsque vous avez besoin d'une copie triée mais que vous la version non triée.Dans Python 2.4, une nouvelle fonction intégrée, -
sorted()
- a été ajoutée. Cette fonction crée une nouvelle liste à partir d'un itérable, la trie et la renvoie. et la renvoie.
Vos problèmes particuliers avec cette fonctionnalité proviennent d'une mauvaise compréhension des bonnes manières de créer un ensemble plutôt que d'une mauvaise conception du langage. Comme Lattyware souligne Dans les versions 2.7 et ultérieures de Python, vous pouvez utiliser un littéral de type "set". a = {1}
ou faire a = set([1])
selon l'avis de Sven Marnach réponse .
Entre parenthèses, j'aime la convention de Ruby qui consiste à placer un point d'exclamation après les méthodes qui mutent les objets, mais je trouve l'approche de Python acceptable.
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.