Nejlepší odpověď
Abyste pochopili hashovatelné typy v Pythonu, musíte pochopit, co je hash a proč se používá. Zde je krátký přehled hašování:
Když hashujete objekt, znamená to, že jej spouštíte prostřednictvím nějaké funkce. Tato funkce se nazývá hashovací funkce. Co tato hashovací funkce dělá, je poskytnout vám jedinečný výstup pro jedinečný vstup. Řekněme například, že máme hashovací funkci zvanou hash a dvě proměnné a a b, takže a! = B, pak hash (a)! = Hash (b). Teoreticky stejně. V praxi budete běžet do hašovací srážky. To znamená a! = B, ale hash (a) == hash (b). Příkladem může být, pokud je vaše hash funkce x mod 10, pak hash (12) == hash (2). Existuje několik způsobů, jak to vyřešit.
Python to používá k ukládání klíčů ve slovnících. Způsob, jakým to dělají, je to, že hashují objekt, poté mapují hash na index v poli a pak tam vkládají hodnotu. Například řekněme, že chcete uložit „123“ na klíč „abc“. Řekněme, že python inicializoval pole pro slovník na 10. Python bude dělat hash (abc) a poté mod o 10, aby se dal do slovníku. Řekněme, že hash (abc) vrací 1234. Python poté upraví, že o 10 bude mít 4. Potom vloží „123“ do indexu 4.
Takže v podstatě hashable type is just a type that lze hashovat. Funkci hashable můžete vytvořit přepsáním \_\_hash\_\_ a \_\_eq\_\_ v pythonu. Musíte však být opatrní, abyste se ujistili, že hash vrátí stejnou věc pokaždé, když dostane stejný objekt. Například pokud uděláte \_\_hash\_\_ vrátit náhodné číslo pokaždé, když to nazveš, už nikdy nenajdeš svůj objekt v hašovatelnosti. Současně nechcete pro každý objekt vrátit stejnou věc, protože pak získáte spoustu falešných poplachů.
Samozřejmě je to trochu komplikovanější a je to extrémně stručný přehled, ale toto jsou základy za hašováním
Odpověď
Toto je těžká otázka (ale dobrá). V americké angličtině lze otázku číst jako „seznam všech věcí, které jazyk Python neumí“. To je pro mě těžké, protože nevím dost na to, abych je všechny uvedl. Níže uvádíme některé věci, které Python nemůže dělat. Další informace najdete ve všech ostatních odpovědích.
- Python pro ovladače zařízení nefunguje. Ovladače zařízení musí být superrychlé a velmi citlivé. Python také nebývá. Ovladače zařízení musí běžet samostatně. Python má velký běhový systém. Python používá systém sběru odpadu podobně jako Java. V některých případech jsou pauzy pro odvoz odpadu neúnosné.
- Python nelze použít na některých opravdu malých počítačích. Některé počítače (například Arduino obecně) jsou pro Python příliš malé. Python má běhovou knihovnu, která některým strojům zabírá příliš mnoho paměti. Existuje něco, co se nazývá MicroPython. I MicroPython však využívá mnohem více paměti, než mají některé (velmi malé) systémy. Všimněte si, že Raspberry Pi je založen na Pythonu.
- Python se v prohlížeči opravdu nespustí. Pro tento problém existují nástroje a řešení. JavaScript je (zdaleka) dominantním nástrojem pro front-end programování, nikoli Python.
- Python není tak přenosný. Ve skutečnosti je Python super přenosný. Musíte však mít již nainstalovaný běh Pythonu. V důsledku toho není většina her napsána v Pythonu. Instalace běhu Pythonu je pro mnoho aplikací příliš velkou překážkou. V tomto ohledu je Python hodně podobný Javě. Java je ve skutečnosti velmi, velmi přenosná. Musíte však mít již nainstalovaný JVM.
- Python je pro některá použití příliš pomalý. Hry mají velmi náročné požadavky na FPS a vyžadují zpracování obrovského počtu pixelů. V důsledku toho je většina her napsána v C / C ++, nikoli v Pythonu. V průměru je Python zhruba stokrát pomalejší než C ++. V mnoha (většinou) případech to není velký problém. Pro hry a některé další aplikace to tak je.
- Python není příliš „holý kovový“ jazyk. Pokud potřebujete přímo přistupovat k hardwaru a manipulovat s ním, nemusí být Python dobrou volbou. Viz bod 1 (ovladače zařízení) výše. Všimněte si, že Python nemá skutečné ukazatele se skutečnými adresami strojů. V některých případech se jedná o zásadní problém.
- Python je do značné míry jedním vláknem (viz další odpovědi). To je v některých případech velký problém (ve skutečnosti jich není mnoho) a v jiných problém. Pamatujte, že Python nedělá zvlášť dobrou práci s používáním tradičních jader. Některé velmi důležité knihovny v Pythonu však využívají jádra CUDA.
Celkově je Python docela dobrý nástroj. Osobně to miluji. Není to však správná volba pro všechno.