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.