Acum, că am vorbit despre cele trei tipuri importante de variabile atomice, să luăm în considerare întrebarea unde se găsesc. S-ar putea să sune ca o întrebare ciudată. Nu sunt „în” celula Jupyter Notebook în care au fost tastate?
De fapt, nu.
Codul în sine este doar un mijloc pentru atingerea unui scop. Scopul codului este de a citi sau scrie ceea ce este în memorie.
Memoria este partea computerului în care sunt stocate variabilele și valorile lor. Pentru a folosi terminologia capitolului 3, memoria este locul în care trăiește mediul. Este invizibil pentru programator, dar este, de asemenea, foarte mult acolo. Cel mai important truc pentru a învăța cum să scrieți codul corect este să vă puteți aminti cum arată memoria în orice moment. Codul pe care trebuie să-l scrieți este o consecință firească a acestui fapt.
La început este mai ușor cu imaginile, așa că le vom desena pe multe din ele. Imaginile de memorie vor avea un format foarte specific, iar acest lucru este crucial: nu fiți creativi cu modul în care sunt etichetate lucrurile sau unde sunt desenate lucrurile. Pentru ca să funcționeze codul dvs., trebuie să aveți această imagine exact corectă. Nu este artă; este știință.
Imaginile noastre ale memoriei vor fi întotdeauna împărțite în exact două „zone”, una în stânga și una în dreapta, etichetate după cum urmează:
Scrierea în memorie
Când creăm variabile atomice într-o celulă Code, precum:
pin_count = 844
username = ‘Bekka Palmer’
fiecare este pusă pe partea stângă a diagramei ca o casetă cu nume. Numele casetei este numele variabilei, iar elementul din casetă este valoarea acesteia.
Nu contează ce casete sunt mai mari sau mai mici pe pagină, doar că fiecare nume se asociază cu caseta corespunzătoare și nu se încurcă. Ca bonus, am colorat diferit casetele, indicând faptul că pin_count (int) este un alt tip decât numele de utilizator (str). (1)
Crearea mai multor variabile adaugă doar mai multe casete cu nume:
avg_num_impressions = 1739.3 board_name = „Things to Make”
Am amestecat în mod deliberat ordinea casetelor. Python nu oferă nicio garanție cu privire la „ordinea” în care va stoca variabilele. Garanțiile Python sunt doar că va stoca în mod constant un nume, o valoare și un tip pentru fiecare variabilă.
Când schimbăm valoarea unei variabile (mai degrabă decât să creăm una nouă), valoarea din caseta corespunzătoare se actualizează:
…
avg_num_impressions = 2000.97
pin_count = 845
another_board = ‘Pink!’
Rețineți că valoarea anterioară din casetă este complet ștearsă și nu există absolut nicio modalitate de a o recupera vreodată. De fapt, nu există nicio modalitate de a ști că a existat chiar o valoare anterioară diferită de cea actuală. Cu excepția cazului în care sunt organizate în mod specific, programele de computer țin doar evidența prezentului, nu a trecutului.
Un alt aspect: spre deosebire de unele limbaje de programare (așa-numitele limbaje „puternic tipizate”, precum Java sau C++), chiar și tipul valorii pe care o deține o variabilă se poate schimba dacă doriți. Chiar dacă următorul exemplu nu are prea mult sens, să presupunem că am scris acest cod în continuare:
…
pin_count = 999.635
username =11
Acest lucru face ca nu numai conținutul casetelor să se schimbe, ci chiar și culorile acestora. Variabila username a fost acum un moment, dar acum este int.
Citirea din memorie
„Citirea din memorie” înseamnă doar referirea la o variabilă pentru a-i recupera valoarea. Până în prezent, nu știm cum să facem cu excepția tipăririi:
print(„The {} board has {} pins.”.format(another_board,
pin_count))
I The Pink! board has 999.635 pins.
Important este că imaginea de memorie este (doar) înregistrarea curentă și fiabilă a aspectului memoriei în orice punct al unui program. Gândiți-vă la asta ca reflectând un instantaneu în timp: imediat după executarea unei linii de cod – și chiar înainte de următoarea – putem consulta imaginea pentru a obține valoarea fiecărei variabile. Exact asta face, practic, Python.
Subliniez acest punct, deoarece am văzut mulți studenți care privesc codul complicat și încearcă să „gândească” ce valoare va avea fiecare variabilă pe măsură ce rulează. Este greu de făcut cdoar cu câteva linii. Pentru a ține evidența a ceea ce s-a schimbat în ceea ce s-a schimbat și când, trebuie să păstrați cu adevărat o listă actualizată a valorii fiecărei variabile pe măsură ce programul se execută … ceea ce este de fapt exact ceea ce este imaginea de memorie.
Deci, dacă încercați să vă dați seama „ce va ieși din acest program dacă imprim variabila odometer imediat după linia 12?” nu încercați să priviți codul și să-i reconstruiți comportamentul de la zero. În schimb, desenați o imagine de memorie, actualizați-o în mod corespunzător în timp ce parcurgeți fiecare linie de cod, apoi uitați-vă la ea pentru răspuns.
Sfat
Apropo, investiția într-o tablă albă mică și câteva markere este o modalitate excelentă de a vă ajuta să învățați programarea. Sunt perfecte pentru desenarea și actualizarea imaginilor de memorie pe măsură ce evoluează.
Notă
(1) Un alt detaliu minuscul pe care l-ați putea observa: chiar dacă codul nostru avea ghilimele simple pentru a delimita numele Bekka Palmer, am pus ghilimele duble în caseta din imaginea de memorie. Acest lucru subliniază faptul că, indiferent de modul în care creați un șir în cod – indiferent dacă este vorba de ghilimele simple sau duble – „lucrul” care se scrie în memorie este același. De fapt, cele stocate sunt de fapt caracterele Bekka Palmer fără ghilimele. Totuși, îmi place să introduc ghilimele în imaginile de memorie, doar pentru a sublinia natura șirului valorii.
Sursa: Stephen Davies, The Crystal Ball – Instruction Manual, Vol. 1: Introduction to Data Science, v. 1.1. Copyright © 2021 Stephen Davies. Licența CC BY-SA 4.0. Traducere și adaptare: Nicolae Sfetcu
© 2021 MultiMedia Publishing, Introducere în Știința Datelor, Volumul 1
Lasă un răspuns