Quels sont les types hachables en Python?


Meilleure réponse

Pour comprendre les types hachables en python, vous devez comprendre ce quest le hachage et pourquoi il est utilisé. Voici donc un bref aperçu du hachage:

Lorsque vous hachez un objet, cela signifie vraiment que vous lexécutez via une fonction. Cette fonction est appelée une fonction de hachage. Cette fonction de hachage vous donne une sortie unique pour une entrée unique. Par exemple, disons que nous avons une fonction de hachage appelée hash et deux variables a et b telles que a! = B, puis hash (a)! = Hash (b). En théorie de toute façon. En pratique, vous exécuterez dans une collision de hachage. Cela signifie a! = B mais hash (a) == hash (b). Un exemple serait si votre fonction de hachage est x mod 10 alors hash (12) == hash (2). Il y a plusieurs façons de gérer cela.

Python lutilise pour stocker les clés dans les dictionnaires. La façon dont ils font cela est quils hachent lobjet, puis mappent le hachage à un index dans un tableau, puis y placent la valeur. Donc, par exemple, disons que vous voulez stocker «123» à la clé «abc». Disons que python a initialisé un tableau pour un dictionnaire à 10. Ce que python fera est hash (abc) puis mod par 10 pour le mettre dans un dictionnaire. Disons que hash (abc) renvoie 1234. Python modifie ensuite cela de 10 pour obtenir 4. Il met ensuite «123» dans lindex 4.

Donc, fondamentalement, un type hachable est juste un type qui peut être hachée. Vous pouvez rendre une fonction hachable en écrasant \_\_hash\_\_ et \_\_eq\_\_ en python. Mais vous devez être prudent pour vous assurer que le hachage renvoie la même chose à chaque fois quil obtient le même objet. Par exemple, si vous faites en sorte que \_\_hash\_\_ renvoie un nombre aléatoire chaque fois que vous lappelez, vous ne retrouverez plus jamais votre objet dans un hashable. En même temps, vous ne voulez pas renvoyer la même chose pour chaque objet, car vous obtiendrez alors beaucoup de faux positifs.

Bien sûr, cest un peu plus compliqué et cest extrêmement bref aperçu mais ce sont les bases du hachage

Réponse

Cest une question difficile (mais bonne). En anglais américain, la question peut être lue comme «lister toutes les choses que le langage Python ne peut pas faire». C’est difficile (pour moi) parce que je n’en connais pas assez pour tous les énumérer. Ci-dessous, jai énuméré certaines des choses que Python ne peut pas faire. Veuillez lire toutes les autres réponses pour plus dinformations.

  1. Python ne fonctionne pas pour les pilotes de périphériques. Les pilotes de périphériques doivent être ultra-rapides et ultra-réactifs. Python na pas tendance à lêtre non plus. Les pilotes de périphériques doivent fonctionner de manière autonome. Python a un grand système dexécution. Python utilise un système de récupération de place un peu comme Java. Dans certains cas, les pauses pour le garbage collection sont intolérables.
  2. Python ne peut pas être utilisé sur de très petits ordinateurs. Certains ordinateurs (comme Arduino en général) sont tout simplement trop petits pour Python. Python a une bibliothèque dexécution qui prend trop de mémoire pour certaines machines. Il y a quelque chose qui sappelle MicroPython. Cependant, même MicroPython utilise beaucoup plus de mémoire que certains (très petits) systèmes. Notez que le Raspberry Pi est basé sur Python.
  3. Python ne fonctionne pas vraiment dans le navigateur. Des outils et des solutions existent pour ce problème. Cependant, JavaScript est (de loin) loutil dominant pour la programmation frontale, pas Python.
  4. Python nest pas si portable. En fait, Python est super portable. Cependant, vous devez avoir le runtime Python déjà installé. Par conséquent, la plupart des jeux ne sont pas écrits en Python. Linstallation du runtime Python est tout simplement trop un obstacle pour de nombreuses applications. À cet égard, Python ressemble beaucoup à Java. Java est en fait très, très portable. Cependant, vous devez avoir une JVM déjà installée.
  5. Python est trop lent pour certaines utilisations. Les jeux ont des exigences FPS très exigeantes et doivent traiter un grand nombre de pixels. En conséquence, la plupart des jeux sont écrits en C / C ++, pas en Python. En moyenne, Python est environ 100 fois plus lent que C ++. Dans de nombreux cas (la plupart en fait), ce n’est pas vraiment un problème. Pour les jeux et certaines autres applications, c’est le cas.
  6. Python n’est pas vraiment un langage «bare metal». Si vous avez besoin daccéder directement au matériel et de le manipuler, Python nest peut-être pas un bon choix. Voir le point 1 (pilotes de périphériques) ci-dessus. Notez que Python na pas de vrais pointeurs avec des adresses de machine réelles. Cest un problème critique dans certains cas.
  7. Python est à peu près mono-thread (voir les autres réponses). Cest un gros problème dans certains cas (pas beaucoup en fait) et un non-problème dans dautres. Notez que Python nutilise pas particulièrement bien les cœurs traditionnels. Cependant, certaines bibliothèques Python très importantes exploitent les cœurs CUDA.

Dans lensemble, Python est un très bon outil. Personnellement, jadore ça. Cependant, ce nest pas le bon choix pour tout.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *