Nejlepší odpověď
Mysli na automobil. Můžeme (a často i) řídíme automobil, aniž bychom pochopili, jak to funguje. Většina lidí se nikdy nedívá na motor automobilu, který žije pod kapotou (v Americe ji nazýváme kapota , ale například ji britští lidé nazývají kapota ).
Kromě motoru je k dispozici převodovka , který odebírá energii generovanou motorem a přenáší ji do hnacího ústrojí , který nakonec vezme tuto sílu a otočí kola. Většina lidí nerozumí žádným z těchto detailů a ani nepotřebují, aby mohli provozovat automobil.
Jako programátor je často užitečné vědět, co se děje pod kapotou, protože vám poskytne přehled do věcí, které nevidíte.
Dva příklady Pythonu, které se mohou ukázat jako užitečné:
Proměnné v Pythonu jsou často vysvětleny pro začínající programátory jako pojmenovaná pole , do kterých můžete vkládat data. Takže když píšete
x = 1
ve skutečnosti vytváříte rámeček a pojmenujete jej x
a vložení 1 do krabice. Když později políčko prohlédnete, zjistíte, že je v něm 1.
Ve skutečnosti se to ale neděje pod kapotou rozpětí>. Proměnná x je reference nebo štítek, který vám řekne, kde je ve skutečnosti 1 v paměti. Přemýšlejte o lístku s poznámkou „x“, která je přilepená na krabici obsahující 1. Pokud se rozhodnete do krabice vložit něco jiného, třeba 2, Python vytvoří zbrusu novou krabičku a přesune ji poznámka od prvního pole k druhému. To lze snadno demonstrovat pomocí funkce id()
Pythonu, která mi efektivně řekne, kde objekt žije v paměti Pythonu (to není úplně pravda, ale vyžaduje odbočku, která již není užitečná za odpověď na otázku).
>>> x = 1
>>> id(x)
4501308752
>>> x = 2
>>> id(x)
4501308784
Vidíte, že x
byl na určitém místě a kdy Změnil jsem jeho obsah, x
se skutečně přesunul. Proč se to stane, je další odbočka, která zde také není důležitá. Faktem je, že x se přesunulo v tom smyslu, že data, na která x odkazuje, jsou nyní na jiném místě.
Začínající programátoři Pythonu to nevědí, a co je důležitější, to nemusí vědět . Je naprosto v pořádku použít analogii pojmenovaného pole.
Druhý příklad je složitější a pro nováčky bude potenciálně obtížně pochopitelný.
Pythonský datový model mapuje řadu takzvaných integrovaných funkcí na metody třídy pod kapotou . Rád bych to vysvětlil pomocí televizního pořadu Stranger Things jako referenčního bodu. V této show je vzhůru dolů , což je jako alternativní vesmír, ve kterém věci jsou rozpoznatelné, ale pokazené. Zvažte funkci Python len()
. Toto je v příručce uvedeno jako Integrovaná funkce , která vrací počet prvků v něčem. Můžete vypočítat délku string
(což je kontejner ), list
(také kontejner) atd.
Začínající programátoři Pythonu se obvykle učí, že len()
je jednoduše vestavěná funkce a funguje na jakýkoli kontejner. Ve skutečnosti se pod kapotou vlastně stane, že Python přeloží volání len()
na metodu v vzhůru nohama s názvem \_\_len\_\_()
. Pokud má objekt, který předáte len()
, metodu \_\_len\_\_()
, bude fungovat. Pokud ne, nebude. Proto například nelze volat len()
na celé číslo:
>>> len(5)
Traceback (most recent call last):
File "
TypeError: object of type "int" has no len()
Počáteční programátor v Pythonu to chápe tak, že celé číslo není kontejner, a proto se to nemá počítat.Je však snadné vytvořit celočíselný typ, pro který můžeme volat funkci len()
:
>>> class MyInt(int):
... # create an "upside down" method for len()
... def \_\_len\_\_(self):
... return 1
...
>>> x = MyInt(13)
>>> x
13
>>> len(x)
1
Vytvořil jsem nový typ s názvem MyInt
, definoval proměnnou x
typu MyInt
a mohl zavolat len()
. Můj len()
je docela zbytečný (), ale dokazuje to, že len()
lze volat pro jakýkoli objekt, nejen pro „kontejner“. “ V praxi bych jako programátor mohl vytvořit svůj vlastní objekt Organization
, který představuje obchodní nebo jinou organizaci. a možná bych chtěl mít možnost volat len()
na objekt Organization
a nechat jej vrátit počet let, po které organizace existuje .
Takže když pochopíme, co se děje pod kapotou, můžeme jít jako programátoři dále.
Odpověď
Myslím, že ostatní dobře vysvětlili, co “ pod kapotou “znamená obecně.
Několik poznámek k objasnění: počítač je v nejjednodušší podobě procesor a hlavní paměť. Procesory čtou velmi konkrétní pokyny a přesouvají hodnoty v paměti. Paměť je rozdělena na nespočet buněk, každá buňka má adresu.
„Pod kapotou“ vypadá paměť vašeho počítače takto:
(Zdroj: https://chortle.ccsu.edu/AssemblyTutorial/Chapter-10/memory01.gif)
Při práci v jazyce vysoké úrovně (předpokládám, že pracujete s Java nebo Pythonem nebo něco podobného) je těžké pochopit, proč jsou věci takové, jaké jsou. Podívejme se například na propojený seznam. Možná vám byl zobrazen obrázek bublin s čísly a vedle nich šipka směřující na jinou bublinu.
Něco takového:
To vše je dobré a dobré pro pochopení toho, jak propojené seznamy fungují ve srovnání s řekněme polem; „pod kapotou“ je to ale hodně jiné.
Jak jsme řekli, všechno v počítači jsou paměťové buňky s hodnotami. Propojený uzel seznamu, i když je vizualizován poblíž svého souseda, může být vzdálený stovky nebo tisíce bajtů od svého souseda. Pod kapotou jsou šipky, které vidíte na obrázku, ve skutečnosti ukazatele a ukazatel může odkazovat na jakoukoli buňku v paměti. Ukazatel zejména odkazuje na adresu dalšího uzlu v seznamu.
Doufám, že tento příklad pomůže objasnit, o čem mluví.