Legjobb válasz
A hashable típusok megértéséhez a pythonban meg kell értenie, hogy mi a hashelés és miért használják. Tehát itt van egy rövid áttekintés a kivonatolásról:
Ha kivonatol egy objektumot, az valóban azt jelenti, hogy valamilyen függvényen futtatja. Ezt a függvényt hash függvénynek hívják. Ez a kivonatolási funkció az, hogy egyedi kimenetet kap egy egyedi bemenethez. Például mondjuk azt, hogy hash függvényünk van, és két a és b változó úgy, hogy a! = B, akkor hash (a)! = Hash (b). Elméletileg mindenképpen. A gyakorlatban hash ütközésbe. Ez azt jelenti, hogy a! = B, de hash (a) == hash (b). Példa lehet, ha a hash függvényed x mod 10, akkor a hash (12) == hash (2). Ezt néhány módon kezelhetjük.
A Python ezt használja a kulcsok szótárakban történő tárolására. Ennek módja az, hogy kivonatolják az objektumot, majd a hash-t egy tömb indexéhez hozzárendelik, majd oda teszik az értéket. Például mondjuk azt, hogy “123” -t akarnak tárolni az “abc” kulcsnál. Mondjuk azt, hogy a python egy szótár tömbjét inicializálta 10-re. Amit a python fog tenni, az a hash (abc), majd a mod 10-re, hogy szótárba tegye. Mondjuk, hogy a hash (abc) az 1234. értéket adja vissza. A Python ezt követően modifikálja 10-gyel a 4 értéket. Ezután a „123” -t a 4. indexbe helyezi.
Tehát alapvetően a hashable típus csak egy típus, kivonatolható. A \_\_hash\_\_ és \_\_eq\_\_ szót felülírhatja a pythonban egy funkciót hashable-vé tehet. De óvatosan kell eljárnia, hogy megbizonyosodjon arról, hogy a hash ugyanazt adja vissza, valahányszor ugyanazt az objektumot kapja. valahányszor hívod, soha többé nem találod tárgyadat hash-ban. Ugyanakkor nem akar minden tárgyra ugyanazt visszaadni, mert akkor sok hamis pozitív eredményt kap.
Természetesen ez egy kicsit bonyolultabb és ez rendkívül rövid áttekintés, de ez az alapja a hashelésnek.
Válasz
Ez egy nehéz kérdés (de jó). Amerikai angol nyelven a kérdés úgy olvasható, hogy „sorolja fel mindazokat, amelyeket a Python nyelv nem képes megtenni”. Ez nehéz (számomra), mert nem tudtam annyira, hogy felsoroljam mindet. Az alábbiakban felsoroltam néhány dolgot, amelyet a Python nem tud megtenni. További információkért olvassa el az összes többi választ.
- A Python nem működik eszközillesztőknél. Az eszközillesztőknek szupergyorsaknak és rendkívül érzékenyeknek kell lenniük. A Python sem szokott lenni. Az eszközillesztőknek önállóan kell futniuk. A Python nagy futásidejű rendszerrel rendelkezik. A Python valamilyen szemétgyűjtő rendszert használ, mint a Java. Bizonyos esetekben a szemétszállítás szünetei elviselhetetlenek.
- A Python nem használható néhány nagyon kicsi számítógépen. Néhány számítógép (például az Arduino általában) túl kicsi a Python számára. A Python futási idejű könyvtárával rendelkezik, amely túl sok memóriát igényel egyes gépek számára. Van valami, amit MicroPythonnak hívnak. Azonban még a MicroPython is sokkal több memóriát használ fel, mint néhány (nagyon kicsi) rendszer. Vegye figyelembe, hogy a Raspberry Pi Python alapú.
- A Python nem igazán fut a böngészőben. Eszközök és megoldások léteznek erre a problémára. A kezelőfelület programozásának azonban (messze) a JavaScript a domináns eszköze, nem a Python.
- A Python nem annyira hordozható. Valójában a Python szuper hordozható. A Python futási idejét azonban már telepíteni kell. Ennek eredményeként a legtöbb játék nem Python-ban íródott. A Python futási idejének telepítése túl sok akadályt jelent sok alkalmazás számára. Ebben a tekintetben a Python nagyon hasonlít a Java-ra. A Java valójában nagyon-nagyon hordozható. Azonban rendelkeznie kell már telepített JVM-mel.
- A Python egyes alkalmazásokhoz túl lassú. A játékok nagyon szigorú FPS követelményekkel rendelkeznek, és rengeteg pixelt kell feldolgozniuk. Ennek eredményeként a legtöbb játékot C / C ++ nyelven írják, nem pedig Python nyelven. Átlagosan a Python nagyjából százszor lassabb, mint a C ++. Sok (valójában a legtöbb) esetben ez nem jelent nagy problémát. Játékokhoz és néhány más alkalmazáshoz igen.
- A Python nem sok „puszta metal” nyelv. Ha közvetlenül hozzá kell férnie a hardverhez és manipulálnia kell, akkor a Python nem biztos, hogy jó választás. Lásd a fenti 1. pontot (eszközillesztők). Ne feledje, hogy a Python nem tartalmaz valódi mutatókat, tényleges gépcímekkel. Ez bizonyos esetekben kritikus probléma.
- A Python nagyjából egyszálú (lásd a többi választ). Ez egyes esetekben nagy probléma (valójában nem sok), más esetekben nem kérdés. Vegye figyelembe, hogy a Python nem végez különösebben jó munkát a hagyományos magok használatával. Néhány nagyon fontos Python könyvtár azonban kihasználja a CUDA magokat.
Összességében elmondható, hogy a Python nagyon jó eszköz. Személy szerint imádom. Ez azonban nem mindenre megfelelő választás.