Extramaterial om Python
Innehåll
Här hittar du trevliga Python-konstruktioner som inte nödvändigtvis finns i andra programmeringsspråk.
Läsa från textfil
Det finns många olika sätt att läsa data från en fil i Python. Vilket sätt som är “bäst” beror på kontexten.
I lektion 2 används följande som “standardsätt” att läsa och bearbeta rader från en fil:
file = open(path)
lines = file.readlines()
file.close()
for line in lines:
# skriv din kod här
pass
Loopa genom öppen fil
Vi kan också använda en for
-loop direkt på en öppen textfil:
file = open(path)
for line in file:
# skriv din kod här
pass
# stäng filen efter när du är klar
file.close()
Det pythonska sättet
Ett mer pythonskt sätt är att använda kontexthanterare i Python (context manager):
with open(path) as file:
for line in file:
# skriv din kod här
pass
Konstruktionen bygger på att objektet (den öppna filen i detta fall)
implementerar metoderna __enter__()
och __exit__()
. Dessa metoder anropas
när vi går in i with
-blocket (__enter__()
), samt när vi lämnar
with
-blocket (__exit__()
).
Med hjälp av denna konstruktion kan den öppna filen stänga sig själv när vi går ut ur kontexten. Koden blir också mer lättläst och det blir tydligt var filen används.
Villkor på en rad
if x == y:
z = 10
else:
z = 0
kan skrivas som
z = 10 if x == y else 0
Mer generellt:
<uttryck A> if <sanningsvärde> else <uttryck B>
I första exemplet motsvaras <uttryck A>
av värdet 10
, inte z = 10
.
is
Skillnaden mellan is
och ==
Skillnaden mellan operatorn is
och ==
är att is
svarar på om två symboler
refererar till samma objekt, medan ==
jämför det beräknade värdet för
två objekt.
Exempel
>>> l1 = [1, 2, 3]
>>> l2 = [1, 2, 3]
>>> l1 == l2
True
>>> l1 is l2
False
När används is
?
Vill du kontrollera om något är lika med något annat, använd ==
. is
kan du
använda när du vill kontrollera om något är None
(det finns bara ’ett’ None
värde).
# funktionen get_price(a_thing) returnerar None om a_thing inte finns i
# prislistan
if get_price("cup") is None:
pass
Om du har ett sanningsvärde är det bättre att bara använda det, dvs skriv hellre
if power_on:
print("The machine is on.")
och skriv inte
if power_on == True:
print("The machine is on.")
Skälet är i huvudsak att det är lättare att läsa det förstnämnda, i andra hand att det senare utför en onödig jämförelseoperation.
Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2024-07-26