Bästa svaret
Tänk på en bil. Vi kan (och ofta) köra bil utan att förstå hur det fungerar. De flesta tittar aldrig på bilens motor som bor under huven (vi kallar den huven i Amerika, men till exempel kallar brittiska folket den motorhuv ).
Förutom motorn finns en transmission , som tar kraften som genereras av motorn och överför den till drivlinan , som i slutändan tar den kraften och vrider hjulen. De flesta människor förstår ingen av dessa detaljer och behöver inte heller för att kunna driva en bil.
Som programmerare är det ofta bra att veta vad som händer under huven, eftersom det ger dig insikt till saker du inte kan se.
Två Python-exempel som kan vara till hjälp:
Variabler i Python förklaras ofta till början av programmerare som namngivna rutor där du kan placera data. Så när du skriver
x = 1
skapar du i själva verket en ruta med namnet x
och sätta en 1 i rutan. När du senare inspekterar rutan hittar du att det finns en 1 i den.
Det är dock inte det som händer under huven . Variabeln x är en referens eller etikett som berättar var 1 faktiskt lagras i minnet. Tänk på en klisterlapp med ett x på, som sitter fast på lådan som innehåller 1. Om du bestämmer dig för att lägga något annat i rutan, kanske en 2, skapar Python en helt ny ruta och flyttar den anteckning från första rutan till den andra. Detta är lätt att demonstrera med Pythons id()
-funktion, som effektivt berättar var ett objekt bor i Pythons minne (det är inte helt sant, men det kräver en avvikelse som inte längre är till hjälp för att svara på frågan).
>>> x = 1
>>> id(x)
4501308752
>>> x = 2
>>> id(x)
4501308784
Du kan se att x
var på en viss plats och när Jag ändrade innehållet, x
flyttade faktiskt. Varför detta händer är en annan avvikelse som inte heller är viktig här. Faktum är att x flyttas i den meningen att data som x hänvisar till nu är på en annan plats.
Början av Python-programmerare vet inte detta och ännu viktigare, de behöver inte veta detta . Det är alldeles utmärkt att använda analogin med en namngiven ruta.
Det andra exemplet är mer komplicerat och kommer potentiellt att vara svårt för nykomlingar att förstå.
Python Data Model kartlägger ett antal så kallade inbyggda funktioner till klassmetoder under huven . Jag vill förklara det med hjälp av TV-programmet Stranger Things som referenspunkt. I den showen finns en uppåt ner , vilket är som ett alternativt universum där saker är igenkännliga, men trassliga. Tänk på funktionen Python len()
. Detta listas i handboken som en Inbyggd funktion som returnerar antalet element i något. Du kan beräkna längden på en string
(som är en behållare ), en list
(även en behållare) och så vidare.
Början på Python-programmerare lär sig vanligtvis att len()
helt enkelt är en inbyggd funktion och den fungerar på valfri behållare. Det som faktiskt händer under huven är att Python översätter ett samtal till len()
till en metod i upp och ner kallas \_\_len\_\_()
. Om objektet du skickar till len()
har en \_\_len\_\_()
-metod fungerar det. Om inte, gör det inte. Det är därför man till exempel inte kan ringa len()
på ett heltal:
>>> len(5)
Traceback (most recent call last):
File "
TypeError: object of type "int" has no len()
Den inledande Python-programmeraren förstår att detta betyder att ett heltal inte är en behållare, och därför inget att räkna med.Men det är enkelt att skapa en heltalstyp som vi kan kalla len()
-funktionen för:
>>> class MyInt(int):
... # create an "upside down" method for len()
... def \_\_len\_\_(self):
... return 1
...
>>> x = MyInt(13)
>>> x
13
>>> len(x)
1
Jag skapade en ny typ som heter MyInt
, definierade en variabel x
av typen MyInt
och kunde ringa len()
. Mitt len()
är ganska värdelöst (), men det bevisar att len()
kan kallas för alla objekt, inte bara en ”container. ” I praktiken kan jag som programmerare skapa mitt eget objekt Organization
, som representerar ett företag eller en annan organisation. och jag kanske vill kunna ringa len()
på ett Organization
-objekt och få det att returnera det antal år som organisationen har funnits .
Så genom att förstå vad som händer under huven kan vi gå längre som programmerare.
Svar
Jag tror att andra har gett bra förklaringar till vad ” under huven ”betyder i allmänhet.
Några anteckningar för att klargöra: en dator, i sin enklaste form, är processorn och huvudminnet. Processorer läser mycket speciella instruktioner och flyttar värdena i minnet. Minnet är uppdelat i otaliga celler, varje cell har en adress.
“Under huven” ser datorns minne så ut:
(Källa: https://chortle.ccsu.edu/AssemblyTutorial/Chapter-10/memory01.gif)
När du arbetar på ett högnivåspråk (jag antar att du arbetar med Java eller Python eller något liknande) är det svårt att förstå varför saker är som de är. Låt oss till exempel överväga en länkad lista. Du kanske har visat en bild av bubblor med siffror i dem med en pil som pekar mot en annan bubbla bredvid.
Något liknande:
Det här är allt bra för att förstå hur länkade listor fungerar jämfört med, till exempel, en array; ”under huven” är det dock mycket annorlunda.
Som vi sa är allt i datorn minnesceller med värden. En länkad listnod, medan den visualiseras nära sin granne, kan vara hundratals eller tusentals byte från sin granne. Under huven är pilarna du ser på bilden faktiskt pekare, och en pekare kan referera till vilken cell som helst i minnet. I synnerhet hänvisar pekaren till adressen till nästa nod i listan.
Hoppas att detta exempel hjälper till att klargöra vad han pratar om.