2.2. Variabile și tipuri de bază#
O variabilă este un nume pe care îl legi de o valoare cu operatorul =. După atribuire, numele poate fi folosit oriunde poate fi folosită valoarea:
width = 320
height = 240
pixels = width * height
print(pixels) # prints 76800
Partea dreaptă a lui = este evaluată prima, apoi rezultatul este legat de numele din stânga. Citirea unui nume care nu a fost niciodată atribuit ridică NameError.
O variabilă este doar o etichetă. Ea indică o valoare – valoarea se află în altă parte, iar aceeași valoare poate avea oricâte etichete.
Variabilele sunt etichete care indică valori. Reatribuirea unei variabile mută eticheta; nu schimbă valoarea pe care eticheta o indica anterior.#
2.2.1. Reguli de denumire#
Numele încep cu o literă sau cu o liniuță de subliniere și pot conține litere, cifre și liniuțe de subliniere.
frame_countși_internalsunt în regulă;1st_frameeste o eroare de sintaxă.Numele sunt sensibile la majuscule:
Widthșiwidthsunt două variabile diferite.Evită reutilizarea numelor încorporate precum
list,str,id()sauprint()– mascarea lor nu ridică o eroare, dar funcția încorporată originală devine inaccesibilă pentru restul scriptului.Convenție:
snake_casepentru variabile și funcții,ALL_CAPSpentru constantele pe care nu intenționezi să le modifici,CamelCasepentru numele de clase.
2.2.2. Tipuri de bază#
Fiecare valoare din Python are un tip care determină ce operații acceptă. Cele patru tipuri pe care le vei scrie cel mai des sunt:
int – numere întregi, pozitive sau negative. Numerele întregi din MicroPython cresc atât de mari cât permite memoria. Literalii se scriu ca simple cifre:
0,42,-7. Literalii hexazecimali (0x1A), octali (0o17) și binari (0b1010) sunt, de asemenea, valizi și utili pentru registre și măști de biți.float – numere cu virgulă zecimală sau cu un exponent:
3.14,1.0,-0.5,2e6(= 2.000.000,0). Toate numerele în virgulă mobilă de pe cameră sunt IEEE 754 pe 32 de biți – precise până la aproximativ șapte cifre semnificative.bool – unul dintre cei doi literali
TruesauFalse(atenție la majuscule).str – text, scris ca o serie de caractere între ghilimele simple sau duble:
"hello",'OpenMV'. Ambele stiluri de ghilimele sunt echivalente; alege-l pe cel care îți permite să eviți escaparea caracterelor de ghilimele care apar în interiorul șirului.
Mai există și o a cincea valoare pe care merită să o cunoști imediat:
None – singura valoare de tip
NoneType. Folosită pentru a însemna „nicio valoare” sau „neatribuită încă”. Funcțiile care nu returnează explicit nimic returnează implicitNone.
2.2.3. Verificarea și conversia tipurilor#
Funcția încorporată type() returnează tipul oricărei valori:
>>> type(42)
<class 'int'>
>>> type(3.14)
<class 'float'>
>>> type("hello")
<class 'str'>
Fiecare tip funcționează și ca funcție de conversie. Dă-i o valoare de un alt tip și primești înapoi valoarea echivalentă de noul tip – atunci când conversia este bine definită:
>>> int("42")
42
>>> int(3.9)
3 # truncates toward zero, not rounds
>>> float("1.5")
1.5
>>> str(255)
'255'
>>> bool(0), bool(1), bool("")
(False, True, False)
Conversiile care nu sunt bine definite ridică ValueError:
>>> int("hello")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid syntax for integer with base 10
2.2.4. Reatribuire și tipare dinamică#
Un nume poate fi reatribuit unei valori de orice tip în orice moment. Următorul cod este valid:
x = 42
x = "now I'm a string"
x = 3.14
Python nu leagă o variabilă de un tip. Codul care depinde de faptul că x este un număr întreg pur și simplu așteaptă un număr întreg în punctul în care îl folosește; dacă primește altceva, obții o TypeError la execuție.
Notă
Reatribuirea lui x nu schimbă valoarea pe care o indica vechea legătură. Dacă două nume împart aceeași valoare, reatribuirea unuia nu îl afectează pe celălalt:
a = [1, 2, 3]
b = a # both point at the same list
a = "different now"
print(b) # still [1, 2, 3]
Modificarea unei valori partajate este diferită: o metodă precum list.append schimbă valoarea pe care o indică legătura, astfel încât orice alt nume care indică aceeași valoare vede modificarea.