2.2. Változók és alaptípusok¶
A változó egy név, amelyet a = operátorral kötsz egy értékhez. Az értékadás után a név bárhol használható, ahol az érték is:
width = 320
height = 240
pixels = width * height
print(pixels) # prints 76800
A = jobb oldala értékelődik ki először, majd az eredmény a bal oldali névhez kötődik. Egy soha nem értékadott név olvasása NameError hibát vált ki.
A változó csak egy címke. Egy értékre mutat – az érték máshol él, és ugyanannak az értéknek tetszőleges számú címkéje lehet.
A változók értékekre mutató címkék. Egy változó újraértékadása a címkét mozgatja; nem változtatja meg azt az értéket, amelyre a címke korábban mutatott.¶
2.2.1. Elnevezési szabályok¶
A nevek betűvel vagy aláhúzással kezdődnek, és tartalmazhatnak betűket, számjegyeket és aláhúzásokat. A
frame_countés az_internalrendben van; az1st_frameszintaktikai hiba.A nevek megkülönböztetik a kis- és nagybetűket: a
Widthés awidthkét különböző változó.Kerüld a beépített nevek, mint a
list,str,id()vagyprint()újrahasználatát – ezek elfedése nem vált ki hibát, de az eredeti beépített elem elérhetetlenné válik a szkript hátralévő részében.Konvenció:
snake_casea változókhoz és függvényekhez,ALL_CAPSazokhoz a konstansokhoz, amelyeket nem áll szándékodban megváltoztatni,CamelCaseaz osztálynevekhez.
2.2.2. Alaptípusok¶
A Pythonban minden értéknek van egy típusa, amely meghatározza, milyen műveleteket támogat. Az a négy típus, amelyet a legtöbbet fogsz írni:
int – egész számok, pozitívak vagy negatívak. A MicroPython egész számai akkorára nőhetnek, amekkorát a memória megenged. A literálokat egyszerű számjegyekként írjuk:
0,42,-7. A hexadecimális (0x1A), oktális (0o17) és bináris (0b1010) literálok szintén érvényesek, és hasznosak regiszterekhez és bitmaszkokhoz.float – tizedesponttal vagy kitevővel rendelkező számok:
3.14,1.0,-0.5,2e6(= 2 000 000.0). A kamerán minden lebegőpontos szám IEEE 754 32 bites – körülbelül hét értékes jegyig pontos.bool – a két literál egyike:
TruevagyFalse(figyeld a nagybetűsítést).str – szöveg, egyszeres vagy kétszeres idézőjelek közé írt karakterek:
"hello",'OpenMV'. A két idézőjelstílus egyenértékű; azt válaszd, amelyik lehetővé teszi, hogy elkerüld a sztringen belül megjelenő idézőjel-karakterek escape-elését.
Van még egy ötödik érték is, amelyet érdemes azonnal megismerni:
None – a
NoneTypetípus egyetlen értéke. A „nincs érték” vagy a „még nincs beállítva” jelentésére használjuk. Azok a függvények, amelyek nem adnak vissza kifejezetten semmit, implicit módonNoneértéket adnak vissza.
2.2.3. Típusok ellenőrzése és konvertálása¶
A beépített type() függvény bármely érték típusát visszaadja:
>>> type(42)
<class 'int'>
>>> type(3.14)
<class 'float'>
>>> type("hello")
<class 'str'>
Minden típus konvertáló függvényként is szolgál. Adj át neki egy másik típusú értéket, és visszakapod az új típus megfelelő értékét – ha a konverzió jól definiált:
>>> 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)
A nem jól definiált konverziók ValueError hibát váltanak ki:
>>> int("hello")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid syntax for integer with base 10
2.2.4. Újraértékadás és dinamikus típusosság¶
Egy név bármikor újraértékadható tetszőleges típusú értékre. A következő érvényes:
x = 42
x = "now I'm a string"
x = 3.14
A Python nem köti egy változót egy típushoz. Az a kód, amely arra támaszkodik, hogy az x egy egész szám, egyszerűen egy egész számot vár azon a ponton, ahol használja; ha valami mást kap, futásidejű TypeError hibát kapsz.
Megjegyzés
Az x újraértékadása nem változtatja meg azt az értéket, amelyre a régi kötés mutatott. Ha két név ugyanazt az értéket osztja meg, az egyik újraértékadása nem érinti a másikat:
a = [1, 2, 3]
b = a # both point at the same list
a = "different now"
print(b) # still [1, 2, 3]
Egy megosztott érték módosítása más: egy olyan metódus, mint a list.append, megváltoztatja azt az értéket, amelyre a kötés mutat, így minden más, ugyanarra az értékre mutató név látja a változást.