Mit csinál ' a motorháztető alatt ' jelent a programozásban?

A legjobb válasz

Gondoljon egy autóra. Vezethetünk (és gyakran is csinálunk) egy autót anélkül, hogy megértenénk annak működését. A legtöbb ember soha nem nézi az autó motorját, amely a motorháztető alatt él (Amerikában motorháztetőnek nevezzük), de például a brit emberek motorháztető ).

A motor mellett van egy sebességváltó , amely átveszi a motor által generált energiát, és továbbítja azt a hajtáslánc -nak, ami végül ezt az erőt veszi és megfordítja a kerekeket. A legtöbb ember nem érti ezeket a részleteket, és nem is kell nekik ahhoz, hogy gépjárművet működjenek.

Programozóként gyakran hasznos tudni, hogy mi történik a motorháztető alatt, mert betekintést nyújt olyan dolgokba, amelyeket nem lát.

Két olyan Python-példa, amelyek hasznosak lehetnek:

A Pythonban található változókat gyakran elmagyarázzák a kezdő programozóknak megnevezett dobozoknak , amelyekbe adatokat helyezhet el. Tehát amikor írsz

x = 1

tulajdonképpen létrehozsz egy dobozt, és elnevezed azt x és betesz egy 1-et a dobozba. Amikor később megvizsgálja a dobozt, azt találja, hogy van benne 1.

Azonban valójában nem ez történik a motorháztető alatt . Az x változó egy hivatkozás vagy címke, amely megmondja, hogy az 1-et valójában hol tárolja a memória. Gondoljon egy cetlire, rajta egy „x” betűvel, amely az 1-es dobozra van ragasztva. Ha úgy dönt, hogy valami mást tesz a dobozba, esetleg egy 2-t, a Python létrehoz egy teljesen új dobozt, és áthelyezi a ragasztót jegyzet az első rovatból a másodikba. Ezt könnyű bemutatni a Python id() függvényével, amely hatékonyan megmondja, hol él egy objektum a Python memóriájában (ez nem feltétlenül igaz, de olyan eltérést igényel, amely már nem hasznos a kérdés megválaszolásához).

>>> x = 1

>>> id(x)

4501308752

>>> x = 2

>>> id(x)

4501308784

Láthatja, hogy x egy adott helyen volt, és mikor Megváltoztattam a tartalmát, x valójában elmozdult. Miért történik ez, az egy újabb kitérés, amely itt szintén nem fontos. Az a tény, hogy x abban az értelemben mozgott, hogy az x-re hivatkozott adatok most más helyen vannak.

A Python kezdő programozói ezt nem tudják, és ami még ennél is fontosabb, ezt nem kell tudniuk . Teljesen rendben van, ha egy elnevezett doboz analógiáját használjuk.

A második példa összetettebb, és az újonnan érkezők számára esetleg nehezen fogható meg.

A Python adatmodell számos úgynevezett beépített függvényt sorol fel a osztály metódusokra a motorháztető alatt . Szeretem elmagyarázni, ha a Stranger Things című tévéműsort referenciapontként használom. Ebben a műsorban van egy fejjel lefelé lefelé , amely olyan, mint egy alternatív univerzum, amelyben a dolgok felismerhetők, de elrontottak. Tekintsük a Python len() függvényt. Ez a kézikönyvben Beépített funkció néven szerepel, amely visszaadja valamiben az elemek számát. Kiszámíthatja egy string (amely egy tároló ), egy (egy tároló is), és így tovább.

A kezdő Python programozóknak általában azt tanítják, hogy a len() egyszerűen beépített függvény, és tovább működik bármilyen tartály. Valójában az történik, hogy a motorháztető alatt az az, hogy a Python egy hívást len() -re fordít a fejjel lefelé , az úgynevezett \_\_len\_\_(). Ha a len() számára átadott objektum \_\_len\_\_() módszerrel rendelkezik, akkor ez működni fog. Ha nem, akkor nem. Ezért például nem hívható a len() egész számra:

>>> len(5)

Traceback (most recent call last):

File "", line 1, in

TypeError: object of type "int" has no len()

A kezdő Python programozó ezt úgy érti, hogy egy egész szám nem konténer, ezért ez nem számít.De könnyű létrehozni egy egész típusú típust, amelyhez hívhatjuk a len() függvényt:

>>> class MyInt(int):

... # create an "upside down" method for len()

... def \_\_len\_\_(self):

... return 1

...

>>> x = MyInt(13)

>>> x

13

>>> len(x)

1

Létrehoztam egy új típust MyInt néven, meghatároztam egy x típusú MyInt típusú, és képes volt felhívni a len() hívást. Az én len() -em elég haszontalan (), de azt bizonyítja, hogy a len() -et bármilyen objektumra lehet meghívni, nem csak „tárolóra”. ” A gyakorlatban programozóként létrehozhatom a saját objektumomat Organization, amely egy üzleti vagy más szervezetet képvisel. és szeretném, ha képes lennék felhívni a len() -t egy Organization objektumra, és visszaadhatnám a szervezet létezésének számát .

Tehát ha megértjük, hogy mi történik a motorháztető alatt, programozóként tovább léphetünk. a motorháztető alatt ”általában azt jelenti.

Néhány megjegyzés, hogy tisztázzuk: a számítógép a legegyszerűbb formájában a processzor és a fő memória. A processzorok nagyon konkrét utasításokat olvasnak, és kb. A memória számtalan cellára van felosztva, minden cellának van címe.

„A burkolat alatt” a számítógép memóriája így néz ki:

(Forrás: https://chortle.ccsu.edu/AssemblyTutorial/Chapter-10/memory01.gif)

Magas szintű nyelven végzett munka esetén (feltételezem, hogy Java vagy Python vagy valami hasonló) nehéz megérteni, hogy a dolgok miért vannak úgy, ahogy vannak. Vegyünk például egy összekapcsolt listát. Előfordulhat, hogy olyan buborékok képét mutatják, amelyekben számok vannak, és a nyíl egy másik buborékra mutat mellette.

Valami hasonló:

Ez nagyon jó és jó annak megértéséhez, hogy a kapcsolt listák hogyan működnek, mondjuk egy tömbhöz képest; azonban a „motorháztető alatt” sokkal másabb.

Mint mondtuk, a számítógépben minden olyan értékmemória. A csatolt listacsomópont, bár a szomszédja közelében látható, több száz vagy ezer bájt távolságra lehet szomszédjától. A motorháztető alatt a képen látható nyilak valójában mutatók, és egy mutató utalhat a memória bármely cellájára. Különösen a mutató hivatkozik a lista következő csomópontjának címére.

Remélem, hogy ez a példa tisztázza, miről beszél.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük