Cel mai bun răspuns
Pentru a înțelege tipurile de hashable în Python, trebuie să înțelegeți ce este hashing și de ce este utilizat. Iată deci o scurtă prezentare generală a hashing-ului:
Când hashezi un obiect, înseamnă că îl rulezi printr-o funcție. Această funcție se numește funcție hash. Ceea ce face această funcție hash este să vă ofere o ieșire unică pentru o intrare unică. De exemplu, să spunem că avem o funcție hash numită hash și două variabile a și b astfel încât a! = B, apoi hash (a)! = Hash (b). În teorie oricum. În practică veți rula într-o coliziune de hash. Asta înseamnă a! = B dar hash (a) == hash (b). Un exemplu ar fi dacă funcția dvs. hash este x mod 10 atunci hash (12) == hash (2). Există câteva modalități de a gestiona acest lucru.
Python îl folosește pentru stocarea cheilor în dicționare. Modul în care fac acest lucru este să hasheze obiectul, apoi să mapeze hashul la un index dintr-o matrice și apoi să pună valoarea acolo. De exemplu, să spunem că doriți să stocați „123” la cheia „abc”. Să spunem că python a inițializat o matrice pentru un dicționar la 10. Ce va face python este hash („abc”) și apoi de 10 pentru a-l pune într-un dicționar. Să spunem că hash (abc) returnează 1234. Python modifică apoi cu 10 pentru a obține 4. Apoi pune „123” în index 4.
Deci, practic, un tip hashable este doar un tip care Puteți face o funcție hashable prin suprascrierea \_\_hash\_\_ și \_\_eq\_\_ în python. Dar trebuie să fiți fericiți pentru a vă asigura că hash returnează același lucru de fiecare dată când obține același obiect. de fiecare dată când îl numiți, nu vă veți mai găsi niciodată obiectul într-un lavabil. În același timp, nu doriți să returnați același lucru pentru fiecare obiect, pentru că atunci veți obține o mulțime de falsuri pozitive.
Desigur, acest lucru este puțin mai complicat și acesta este un lucru extrem de scurtă prezentare generală, dar acesta este elementele de bază din spatele hashing
Răspuns
Aceasta este o întrebare dificilă (dar bună). În limba engleză americană, întrebarea poate fi citită ca „enumeră toate lucrurile pe care limba Python nu le poate face”. Este greu (pentru mine), deoarece nu știu suficient pentru a le enumera pe toate. Mai jos am enumerat câteva dintre lucrurile pe care Python nu le poate face. Vă rugăm să citiți toate celelalte răspunsuri pentru mai multe informații.
- Python nu funcționează pentru driverele de dispozitiv. Driverele de dispozitiv trebuie să fie super-rapide și ultra-receptive. Nici Python nu tinde să fie. Driverele de dispozitiv trebuie să ruleze independent. Python are un sistem mare de rulare. Python folosește un sistem de colectare a gunoiului oarecum ca Java. În unele cazuri, pauzele pentru colectarea gunoiului sunt intolerabile.
- Python nu poate fi utilizat pe unele computere foarte mici. Unele computere (cum ar fi Arduino în general) sunt prea mici pentru Python. Python are o bibliotecă de execuție care necesită prea multă memorie pentru unele mașini. Există ceva numit MicroPython. Cu toate acestea, chiar și MicroPython folosește mult mai multă memorie decât au unele sisteme (foarte mici). Rețineți că Raspberry Pi se bazează pe Python.
- Python nu rulează cu adevărat în browser. Există instrumente și soluții pentru această problemă. Cu toate acestea, JavaScript este (de departe) instrumentul dominant pentru programarea front-end, nu Python.
- Python nu este atât de portabil. De fapt, Python este super-portabil. Cu toate acestea, trebuie să aveți timpul de execuție Python deja instalat. În consecință, majoritatea jocurilor nu sunt scrise în Python. Instalarea timpului de execuție Python este un obstacol prea mare pentru multe aplicații. În acest sens, Python seamănă mult cu Java. Java este de fapt foarte, foarte portabil. Cu toate acestea, trebuie să aveți deja instalată o JVM.
- Python este prea lent pentru anumite utilizări. Jocurile au cerințe FPS foarte exigente și trebuie să proceseze un număr mare de pixeli. În consecință, majoritatea jocurilor sunt scrise în C / C ++, nu în Python. În medie, Python este de aproximativ 100 de ori mai lent decât C ++. În multe cazuri (cel mai de fapt), nu este o problemă prea mare. Pentru jocuri și alte aplicații, este.
- Python nu este un limbaj „bare metal”. Dacă trebuie să accesați direct și să manipulați hardware-ul, este posibil ca Python să nu fie o alegere bună. A se vedea punctul 1 (driverele de dispozitiv) de mai sus. Rețineți că Python nu are pointeri adevărați cu adrese reale ale mașinii în ele. Aceasta este o problemă critică în unele cazuri.
- Python are aproape un singur fir (vezi celelalte răspunsuri). Aceasta este o mare problemă în unele cazuri (nu prea multe) și o problemă în alte cazuri. Rețineți că Python nu face o treabă deosebit de bună în utilizarea nucleelor tradiționale. Cu toate acestea, unele biblioteci Python foarte importante exploatează nucleele CUDA.
În general, Python este un instrument destul de bun. Personal, îmi place. Cu toate acestea, nu este alegerea potrivită pentru toate.