Paras vastaus
Ymmärtääksesi hashable-tyypit pythonissa, sinun on ymmärrettävä, mikä hajautus on ja miksi sitä käytetään. Joten tässä on lyhyt yhteenveto hajautuksesta:
Kun hajautat objektia, se tarkoittaa todella, että käytät sitä jonkin toiminnon läpi. Tätä toimintoa kutsutaan hash-funktioksi. Tämä hash-toiminto antaa sinulle ainutlaatuisen tuloksen ainutlaatuiselle tulolle. Sanotaan esimerkiksi, että meillä on hash-funktio nimeltä hash ja kaksi muuttujaa a ja b siten, että a! = B, sitten hash (a)! = Hash (b). Teoriassa joka tapauksessa. Käytännössä suoritat törmäykseen. Tämä tarkoittaa a! = B, mutta hash (a) == hash (b). Esimerkiksi, jos hash-funktiosi on x mod 10, sitten hash (12) == hash (2). On olemassa muutama tapa hoitaa tämä.
Python käyttää tätä avainten tallentamiseen sanakirjoihin. Tapa, jolla he tekevät tämän, he hajauttavat objektin, kartoittavat sitten hajautuksen taulukon hakemistoon ja asettavat sitten arvon sinne. Joten sanotaan esimerkiksi, että haluat tallentaa ”123” avaimeen ”abc”. Sanotaan, että python alustaa sanakirjan matriisin arvoksi 10. Mitä python tekee, on hash (abc) ja sitten mod 10 kertaa laittaa se sanakirjaan. Olkoon ”s sanoa, että hash (abc) palauttaa arvon 1234. Python modifioi sen 10: llä saadakseen arvon 4. Se lisää sitten” 123 ”hakemistoon 4.
Joten pohjimmiltaan hashable-tyyppi on vain tyyppi, joka voidaan tehdä hajautus. Voit tehdä funktiosta hashable korvaamalla \_\_hash\_\_ ja \_\_eq\_\_ pythonissa. Mutta sinun on oltava varovainen varmistaaksesi, että hash palauttaa saman asian aina, kun se saa saman objektin. Esimerkiksi, jos teet \_\_hash\_\_ palauttamaan satunnaisluvun joka kerta, kun soitat sille, et koskaan löydä esineesi enää hashabesta. Samaan aikaan et halua palauttaa samaa jokaiselle esineelle, koska silloin saat paljon väärää positiivista.
Tämä on tietysti hieman monimutkaisempi ja tämä on erittäin lyhyt yleiskatsaus, mutta tämä on hajauttamisen perusteet
Vastaus
Tämä on vaikea kysymys (mutta hyvä). Amerikan englanniksi kysymys voidaan lukea ”listaa kaikki asiat, joita Python-kieli ei voi tehdä”. Se on vaikeaa (minulle), koska en tiedä tarpeeksi luetellakseni niitä kaikkia. Alla olen luetellut joitain asioita, joita Python ei voi tehdä. Lue kaikki muut vastaukset saadaksesi lisätietoja.
- Python ei toimi laiteajureissa. Laiteajurien on oltava erittäin nopeita ja erittäin reagoivia. Pythonilla ei ole taipumusta olla. Laiteohjainten on suoritettava itsenäisesti. Pythonilla on suuri ajonaikainen järjestelmä. Python käyttää roskien keräysjärjestelmää jonkin verran kuin Java. Joissakin tapauksissa roskakorin tauot ovat sietämättömiä.
- Pythonia ei voi käyttää joissakin todella pienissä tietokoneissa. Jotkut tietokoneet (kuten yleensä Arduino) ovat aivan liian pieniä Pythonille. Pythonilla on ajonaikainen kirjasto, joka vie liian paljon muistia joillekin koneille. On jotain nimeltä MicroPython. Jopa MicroPython käyttää kuitenkin paljon enemmän muistia kuin joissakin (hyvin pienissä) järjestelmissä on. Huomaa, että Raspberry Pi on Python-pohjainen.
- Python ei todellakaan toimi selaimessa. Tähän ongelmaan on olemassa työkaluja ja ratkaisuja. Kuitenkin JavaScript on (ylivoimaisesti) hallitseva työkalu käyttöliittymän ohjelmoinnissa, ei Python.
- Python ei ole niin kannettava. Itse asiassa Python on erittäin kannettava. Python-ajoaika on kuitenkin oltava jo asennettuna. Tämän seurauksena useimpia pelejä ei ole kirjoitettu Pythonissa. Python-ajoajan asentaminen on aivan liian suuri este monille sovelluksille. Tässä suhteessa Python on paljon kuin Java. Java on oikeastaan erittäin, hyvin kannettava. Sinulla on kuitenkin oltava JVM jo asennettuna.
- Python on liian hidas joihinkin käyttötarkoituksiin. Peleillä on erittäin vaativat FPS-vaatimukset ja niiden on käsiteltävä valtava määrä pikseleitä. Tämän seurauksena suurin osa peleistä kirjoitetaan C / C ++: lla, ei Pythonilla. Keskimäärin Python on noin 100 kertaa hitaampi kuin C ++. Monissa (useimmissa tapauksissa) se ei ole suuri ongelma. Pelien ja joidenkin muiden sovellusten kohdalla se on.
- Python ei ole kovin paljo metalli-kieli. Jos sinun on käytettävä laitteistoa suoraan ja sitä on käsiteltävä, Python ei välttämättä ole hyvä valinta. Katso yllä oleva kohta 1 (laiteajurit). Huomaa, että Pythonissa ei ole todellisia osoittimia, joissa olisi todellisia koneosoitteita. Tämä on joissakin tapauksissa kriittinen ongelma.
- Python on melko yksisäikeinen (katso muut vastaukset). Tämä on joissakin tapauksissa suuri ongelma (ei kovinkaan paljon) ja toisissa ei-ongelma. Huomaa, että Python ei tee erityisen hyvää työtä perinteisten ytimien käytössä. Jotkut erittäin tärkeät Python-kirjastot kuitenkin hyödyntävät CUDA-ytimiä.
Kaiken kaikkiaan Python on melko hyvä työkalu. Henkilökohtaisesti rakastan sitä. Se ei kuitenkaan ole oikea valinta kaikkeen.