il y a un truc que je viens de remarquer et qui me parait totalement illogique en python.
Python est un langage qui est censé être basé sur le duck-typing. Exemple sur l'itération:
def my_beautiful_function(my_list=list()):
for value in my_list:
print(value)
ici, j'ai une fonction qui attends une liste. Mais en fait, du moment que le paramètre a une méthode __iter__, ça fonctionne.
Donc ça fonctionne si on envoi une liste, mais aussi un tuple, un set, un objet custom, un dictio… euh nan pas un dictionnaire !??
Enfin ça va itérer, mais les dictionnaires par défaut ne renvoie pas les valeurs, mais les clés lorsque l'on itère dessus, alors que tous les autres itérables renvoient leurs valeurs. Donc impossible de passer un dictionnaire à ma fonction ici. Ça va faire des trucs bizarres.
Du coup, je ne comprends pas le choix qui a été fait de renvoyer les clés lorsque l'on itère sur un dictionnaire.
Il y a plusieurs manières d'itérer sur un dictionnaire, y compris pour accéder à ses valeurs (items, values, ...).
Malheureusement ce choix ne t'arrange pas, mais ce principe a connu des débats et amener à une décision de la part d'un groupe de travail.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
il y a un truc que je viens de remarquer et qui me parait totalement illogique en python.
Python est un langage qui est censé être basé sur le duck-typing. Exemple sur l'itération:
def my_beautiful_function(my_list=list()): for value in my_list: print(value)
ici, j'ai une fonction qui attends une liste. Mais en fait, du moment que le paramètre a une méthode __iter__, ça fonctionne. Donc ça fonctionne si on envoi une liste, mais aussi un tuple, un set, un objet custom, un dictio… euh nan pas un dictionnaire !??
Enfin ça va itérer, mais les dictionnaires par défaut ne renvoie pas les valeurs, mais les clés lorsque l'on itère dessus, alors que tous les autres itérables renvoient leurs valeurs. Donc impossible de passer un dictionnaire à ma fonction ici. Ça va faire des trucs bizarres.
Du coup, je ne comprends pas le choix qui a été fait de renvoyer les clés lorsque l'on itère sur un dictionnaire.
- Edité par Megalo il y a environ 1 heure
Oui, mais ça serait relativement idiot de renvoyer par défaut les indices pour les autres (set, tuples, listes, etc.) sachant que l'index des valeurs n'a a priori aucun intérêt. Par exemple, dans un set, l'indice n'a aucun intérêt, le seul intérêt des set est de ne pas avoir deux fois le même éléments. Ce n'est pas le cas des dictionnaires pour lesquels les valeurs ne sont atteignables que grâce à une clef particulière et pour lesquels les clefs sont uniques.
> Il y a plusieurs manières d'itérer sur un dictionnaire, y compris pour accéder à ses valeurs (items, values, ...).
oui, je connais ça. Mais du coup on perd le duck-typing (list n'as pas de méthode values, enumerate ne fonctionne pas sur les dico, etc. Donc obligé de se débrouiller à coup de try ou de if).
> Oui, mais ça serait relativement idiot de renvoyer par défaut les indices pour les autres (set, tuples, listes, etc.) sachant que l'index des valeurs n'a a priori aucun intérêt. Par exemple, dans un set, l'indice n'a aucun intérêt, le seul intérêt des set est de ne pas avoir deux fois le même éléments.
Je suis parfaitement d'accords là dessus. C'est plutôt le choix sur les dictionnaires que je trouves surprenant. Quand on itère, c'est quand même beaucoup plus fréquent de devoir accéder au valeurs qu'aux clés il me semble.
Nephthys a écrit:
> Oui, mais ça serait relativement idiot de renvoyer par défaut les indices pour les autres (set, tuples, listes, etc.) sachant que l'index des valeurs n'a a priori aucun intérêt. Par exemple, dans un set, l'indice n'a aucun intérêt, le seul intérêt des set est de ne pas avoir deux fois le même éléments. Ce n'est pas le cas des dictionnaires pour lesquels les valeurs ne sont atteignables que grâce à une clef particulière et pour lesquels les clefs sont uniques.
Dans un set, les indices n'existent même pas, les sets ne sont pas subscriptables.
@Megalo, justement, en appelant la méthode values tu récupérerais une vue sur les valeurs de ton dictionnaire, vue que tu peux parfaitement passer à ta fonction.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Le Tout est souvent plus grand que la somme de ses parties.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique