Paras vastaus
Ajattele autoa. Voimme ajaa (ja usein ajamme) autoa ymmärtämättä sen toimintaa. Useimmat ihmiset eivät koskaan katso auton moottoria, joka asuu konepellin alla (kutsumme sitä hupuksi Amerikassa), mutta esimerkiksi britit kutsuvat sitä konepelti ).
Moottorin lisäksi on -vaihteisto , joka ottaa moottorin tuottaman tehon ja lähettää sen voimansiirtoon , joka lopulta ottaa tämän voiman ja kääntää pyöriä. Suurin osa ihmisistä ei ymmärrä mitään näistä yksityiskohdista, eikä myöskään heidän tarvitse ajaa autoa.
Ohjelmoijana on usein hyödyllistä tietää, mitä konepellin alla tapahtuu, koska se antaa sinulle oivalluksen asioihin, joita et näe.
Kaksi Python-esimerkkiä, joista voi olla hyötyä:
Pythonin muuttujat selitetään usein aloittaville ohjelmoijille nimetyiksi laatikoiksi , joihin voit sijoittaa tietoja. Joten kirjoittaessasi
x = 1
olet itse asiassa luomassa laatikkoa, nimeämällä sen x
ja laittamalla 1 ruutuun. Kun myöhemmin tarkastat laatikon, huomaat, että siinä on yksi.
Se ei kuitenkaan ole oikeastaan sitä, mitä hupun alla tapahtuu väli>. Muuttuja x on viite tai tunniste, joka kertoo, mihin 1 tosiasiallisesti on tallennettu muistiin. Ajattele tarralapua, jossa on x, joka on juuttunut laatikkoon, joka sisältää 1. Jos päätät laittaa laatikkoon jotain muuta, ehkä 2, Python luo upouuden laatikon ja siirtää tarralapun. muistiinpano ensimmäisestä ruudusta toiseen. Tämä on helppo osoittaa käyttämällä Pythonin id()
-funktiota, joka kertoo minulle, missä kohde asuu Pythonin muistissa (se ei ole totta, mutta se edellyttää poikkeamaa, josta ei ole enää hyötyä kysymykseen vastaamiseksi).
>>> x = 1
>>> id(x)
4501308752
>>> x = 2
>>> id(x)
4501308784
Voit nähdä, että x
oli tietyssä paikassa ja milloin Muutin sen sisältöä, x
muutin todella. Miksi tämä tapahtuu, on toinen poikkeama, jolla ei myöskään ole merkitystä tässä. Tosiasia on, että x siirtyi siinä mielessä, että tiedot, joihin x viittaa, ovat nyt eri paikassa.
Aloittavat Python-ohjelmoijat eivät tiedä tätä ja mikä tärkeintä, heidän ei tarvitse tietää tätä . On täysin hienoa käyttää nimettyjen laatikoiden analogiaa.
Toinen esimerkki on monimutkaisempi ja sitä on mahdollisesti vaikea ymmärtää uusille tulokkaille.
Python-tietomalli kartoittaa useita ns. sisäänrakennettuja funktioita luokan menetelmiin konepellin alla . Haluan selittää sen käyttämällä TV-ohjelmaa Stranger Things viitepisteenä. Tässä näyttelyssä on ylösalaisin alas , joka on kuin vaihtoehtoinen maailmankaikkeus, jossa asiat ovat tunnistettavissa, mutta sekaisin. Harkitse Python len()
-funktiota. Tämä on lueteltu käsikirjassa nimellä Sisäänrakennettu toiminto , joka palauttaa elementtien määrän jossakin. Voit laskea string
(joka on -säiliö ) pituuden, list
(myös säilö) ja niin edelleen.
Pythonin alkuohjelmoijille opetetaan tyypillisesti, että len()
on yksinkertaisesti sisäänrakennettu toiminto ja se toimii kaikki astiat. Itse asiassa konepellin alla tapahtuu, että Python kääntää kutsun len()
menetelmäksi ylösalaisin kutsutaan \_\_len\_\_()
. Jos objektille, jonka välität osoitteeseen len()
, on \_\_len\_\_()
-menetelmä, se toimii. Jos ei, se ei tule. Siksi esimerkiksi len()
ei voi kutsua kokonaisluvuksi:
>>> len(5)
Traceback (most recent call last):
File "
TypeError: object of type "int" has no len()
Aloittava Python-ohjelmoija ymmärtää tämän tarkoittavan, että kokonaisluku ei ole säilö, joten tämä ei ole mitään laskettavaa.Mutta on helppo luoda kokonaislukutyyppi, jolle voimme kutsua funktiota len()
:
>>> class MyInt(int):
... # create an "upside down" method for len()
... def \_\_len\_\_(self):
... return 1
...
>>> x = MyInt(13)
>>> x
13
>>> len(x)
1
Loin uuden tyypin nimeltä MyInt
, määritin muuttujan x
, tyyppi MyInt
, ja pystyi soittamaan numeroon len()
. Oma len()
on melko hyödytön (), mutta se osoittaa, että len()
voidaan kutsua mihin tahansa esineeseen, ei pelkästään ”konttiin”. ” Käytännössä voin ohjelmoijana luoda oman objektini Organization
, joka edustaa yritystä tai muuta organisaatiota. ja haluan ehkä pystyä soittamaan len()
Organization
-objektille ja antaa sen palauttaa organisaation olemassaolon vuosien määrä .
Joten ymmärtämällä, mitä hupun alla tapahtuu, voimme mennä pidemmälle ohjelmoijina.
Vastaus
Luulen, että muut ovat antaneet hyviä selityksiä siitä, mitä ” konepellin alla ”tarkoittaa yleensä.
Joitakin selvennyksiä: tietokone on prosessori ja päämuisti yksinkertaisimmillaan. Prosessorit lukevat tarkat ohjeet ja siirtävät arvoja muistissaan. Muisti on jaettu lukemattomiin soluihin, jokaisella solulla on osoite.
”Konepellin alla” tietokoneesi muisti näyttää tältä:
(Lähde: https://chortle.ccsu.edu/AssemblyTutorial/Chapter-10/memory01.gif)
Kun työskentelet korkean tason kielellä (oletan, että työskentelet Java- tai Python-ohjelmalla tai jotain vastaavaa) on vaikea ymmärtää miksi asiat ovat niin kuin ne ovat. Tarkastellaan esimerkiksi linkitettyä luetteloa. Sinulle on voitu näyttää kuva kuplista, joissa on numeroita ja nuoli osoittaa toiseen kuplaan sen vieressä.
Jotain niin:
Tämä kaikki on hyvin ymmärrettävää, miten linkitetyt luettelot toimivat esimerkiksi ryhmään verrattuna; ”konepellin alla” se on kuitenkin paljon erilainen.
Kuten sanoimme, kaikki tietokoneessa on muistisoluja, joilla on arvoja. Linkitetty luettelosolmu, vaikka se visualisoidaan naapurinsa lähellä, voi olla satojen tai tuhansien tavujen päässä naapurista. Hupun alla kuvassa näkyvät nuolet ovat itse asiassa osoittimia, ja osoitin voi viitata mihin tahansa muistin soluun. Osoitin viittaa erityisesti luettelon seuraavan solmun osoitteeseen.
Toivottavasti tämä esimerkki auttaa selventämään, mistä hän puhuu.