2.2. Muuttujat ja perustyypit¶
Muuttuja on nimi, jonka sidot arvoon =-operaattorilla. Sijoituksen jälkeen nimeä voi käyttää kaikkialla, missä arvoakin voi:
width = 320
height = 240
pixels = width * height
print(pixels) # prints 76800
=-merkin oikeanpuoleinen osa evaluoidaan ensin, minkä jälkeen tulos sidotaan vasemmalla olevaan nimeen. Nimen lukeminen, jota ei ole koskaan sijoitettu, nostaa virheen NameError.
Muuttuja on vain nimilappu. Se osoittaa arvoon – arvo asuu jossain muualla, ja samalla arvolla voi olla mikä tahansa määrä nimilappuja.
Muuttujat ovat arvoihin osoittavia nimilappuja. Muuttujan uudelleensijoittaminen siirtää nimilappua; se ei muuta arvoa, johon nimilappu aiemmin osoitti.¶
2.2.1. Nimeämissäännöt¶
Nimet alkavat kirjaimella tai alaviivalla ja voivat sisältää kirjaimia, numeroita ja alaviivoja.
frame_countja_internalovat kelvollisia;1st_frameon syntaksivirhe.Nimet ovat kirjainkokoriippuvaisia:
Widthjawidthovat kaksi eri muuttujaa.Vältä sisäänrakennettujen nimien kuten
list,str,id()taiprint()uudelleenkäyttöä – niiden varjostaminen ei nosta virhettä, mutta alkuperäinen sisäänrakennettu funktio muuttuu saavuttamattomaksi skriptin loppuosaksi.Käytäntö:
snake_casemuuttujille ja funktioille,ALL_CAPSvakioille joita et aio muuttaa,CamelCaseluokkanimille.
2.2.2. Perustyypit¶
Jokaisella Python-arvolla on tyyppi, joka määrää mitä operaatioita se tukee. Neljä tyyppiä joita kirjoitat eniten ovat:
int – kokonaisluvut, positiiviset tai negatiiviset. MicroPythonin kokonaisluvut kasvavat niin suuriksi kuin muisti sallii. Literaalit kirjoitetaan pelkillä numeroilla:
0,42,-7. Myös heksadesimaali- (0x1A), oktaali- (0o17) ja binääriliteraalit (0b1010) ovat kelvollisia ja hyödyllisiä rekistereille ja bittimaskeille.float – luvut, joissa on desimaalipiste tai eksponentti:
3.14,1.0,-0.5,2e6(= 2 000 000.0). Kaikki kameran liukuluvut ovat IEEE 754 -muotoisia 32-bittisiä – tarkkoja noin seitsemään merkitsevään numeroon asti.bool – jompikumpi kahdesta literaalista
TruetaiFalse(huomaa isot alkukirjaimet).str – tekstiä, kirjoitettuna merkkeinä yksittäisten tai kaksoislainausmerkkien välissä:
"hello",'OpenMV'. Molemmat lainausmerkkityylit ovat samanarvoisia; valitse se, joka antaa sinun välttää merkkijonon sisällä esiintyvien lainausmerkkien suojaamisen.
On myös viides arvo, joka kannattaa tietää heti:
None – tyypin
NoneTypeainoa arvo. Käytetään tarkoittamaan ”ei arvoa” tai ”ei vielä asetettu”. Funktiot, jotka eivät nimenomaisesti palauta mitään, palauttavat implisiittisestiNone.
2.2.3. Tyyppien tarkistaminen ja muuntaminen¶
Sisäänrakennettu type()-funktio palauttaa minkä tahansa arvon tyypin:
>>> type(42)
<class 'int'>
>>> type(3.14)
<class 'float'>
>>> type("hello")
<class 'str'>
Jokainen tyyppi toimii myös muunnosfunktiona. Anna sille eri tyyppinen arvo, niin saat takaisin vastaavan uuden tyypin arvon – silloin kun muunnos on hyvin määritelty:
>>> 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)
Muunnokset, jotka eivät ole hyvin määriteltyjä, nostavat virheen 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. Uudelleensijoitus ja dynaaminen tyypitys¶
Nimi voidaan uudelleensijoittaa minkä tahansa tyyppiseen arvoon milloin tahansa. Seuraava on sallittua:
x = 42
x = "now I'm a string"
x = 3.14
Python ei sido muuttujaa tyyppiin. Koodi, joka olettaa muuttujan x olevan kokonaisluku, yksinkertaisesti odottaa kokonaislukua siinä kohdassa, jossa se sitä käyttää; jos se saa jotain muuta, saat ajonaikaisen virheen TypeError.
Muista
Muuttujan x uudelleensijoittaminen ei muuta arvoa, johon vanha sidonta osoitti. Jos kaksi nimeä jakaa saman arvon, toisen uudelleensijoittaminen ei vaikuta toiseen:
a = [1, 2, 3]
b = a # both point at the same list
a = "different now"
print(b) # still [1, 2, 3]
Jaetun arvon muuttaminen on eri asia: metodi kuten list.append muuttaa arvoa, johon sidonta osoittaa, joten jokainen muu samaan arvoon osoittava nimi näkee muutoksen.