Python
Datatyper & filhantering
Datatyper
•
•
•
•
•
•
Heltal - 3
Flyttal - 2,456
Listor - [1,2,3,4]
Strängar - ”spam!”
Dictionaries - {1:”camelot”,2:”shrubbery”}
Tupler - (1,2,3,)
1
Objekt
•
•
•
•
•
I Prolog finns inga objekt, bara värden
Ett objekt har attribut
Ett objekt har metoder
Typer
Klasser
Anropa metoder & attribut
• En metod är en funktion som "lever" i ett
objekt
• Ett attribut är en egenskap hos ett objekt
metod:
[1,2,3].append(5)
attribut:
parrot.life
2
type()
>>> a=7
>>> b=2.4
>>> c="hello sailor!"
>>> d=[1,1,1,1,1]
>>> type(a)
<type 'int'>
>>> type(b)
<type 'float'>
>>> type(c)
<type 'str'>
>>> type(d)
<type 'list'>
Lite snabbt: dictionaries och tupler
• Dictionaries är oordnade nyckel-värde-par
• Effektiva, enkla. Mycket vanliga. (kallas hash i
perl)
ex:
spamDict = {1:"spam", 5:"tomato", 2:"eggs", 3:"spam"}
print spamDict[5]
'tomato'
mer om dictionaries en annan gång
3
Lite snabbt: dictionaries och tupler
• Tupler är ordnade sekvenser av objekt
• Små, snabba. Väldigt Pythonska
spamTuple = (1,2,3)
• Skillnad mot listor? Immutable.
• Mer om tupler en annan gång
Listor
•
•
•
•
Listor är en ordnad sekvens av objekt
Listor är inte en rekursiv datastruktur
Listor är mutable (föränderliga)
Listor har index
4
Index
• Ett ordningstal
ex:
>>> myLittleList = [1,2,3,4,5]
>>> print myLittleList[0]
1
• det första objektet är det "0-te"
>>> print myLittleList[1]
2
• funkar bakifrån:
>>>
5
print myLittleList[-1]
Slice
• Är ett ursnitt ur en lista (eller tupel, eller sträng)
• Lite ointuitivt.
lista[n:m]
där n är start och m är slut
• OBS!
>>>
>>>
3
>>>
[1,
aList = [0,1,2,3]
aList[3]
aList[1:3]
2]
5
Slice
Index
0
1
2
3
4
[ 1, 2, 3, 4, 5 ]
Slice
0
1
2
3
4
-5
-4
-3
-2
-1
5
Metoder på listor
•
•
•
•
•
•
•
•
•
append(...) L.append(object) -- append object to end
count(...) L.count(value) -> integer -- return number of occurrences
of value
extend(...) L.extend(iterable) -- extend list by appending elements
from the iterable
index(...) L.index(value, [start, [stop]]) -> integer -- return first
index of value
insert(...) L.insert(index, object) -- insert object before index
pop(...) L.pop([index]) -> item -- remove and return item at index
(default last)
remove(...) L.remove(value) -- remove first occurrence of value
reverse(...) L.reverse() -- reverse *IN PLACE*
sort(...) L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN
PLACE*; cmp(x, y) -> -1, 0, 1
6
Listor
>>> a=[1,2,3,4]
>>> a.append(6)
>>> a
[1,2,3,4,6]
>>> a.append([37])
>>> a
[1,2,3,4,6,[37]]
>>> b=[4,3,2,1]
>>> b.extend([5,6])
>>> b
[4,3,2,1,5,6]
>>> b.reverse()
>>> b
[6,5,1,2,3,4]
>>> b.sort()
>>> b
[1,2,3,4,5,6]
Strängar
• En ordnad sekvens av tecken
• Rekursiv struktur; varje tecken i en sträng är
också en sträng
• Går att skriva på flera sätt, se lab 1.
7
Index & slice
• Strängar har också index och slice
>>> aString = "My brain hurts!"
>>> aString[3]
'b'
>>> aString[3:8]
'brain'
Men…
Listor
Strängar
>>>
>>>
3
>>>
>>>
[1,
>>> aString = "Hostile"
>>> aString[3]
't'
>>> aString[3] = "q"
Traceback (most recent
call last):
File "<stdin>", line
1, in <module>
TypeError: 'str' object
does not support item
assignment
aList = [1,2,3]
aList[2]
aList[2] = 8
aList
2, 8]
8
Strängar
• Strängar är alltså immutable
• Hur gör man då?
def removeT(inString):
result = ""
for char in inString:
if char != "t":
result = result + char
return result
print removeT("loretta and stan")
"lorea and san"
Filhantering
För att skapa ett filobjekt:
file(pathToFile, mode [,buffering])
mode är "r" (read), "w" (write) eller "a"
(append) ([, buffering] betyder ev. arg.)
Exampel:
inFile = file("/Users/petern/bad_novel.txt", "r")
.
.
inFile.close()
9
Filhantering
• close() -> None or (perhaps) an integer. Close
the file.
• read([size]) -> read at most size bytes,
returned as a string.
• readline([size]) -> next line from the file, as
a string.
• readlines([size]) -> list of strings, each a
line from the file.
• write(str) -> None. Write string str to file.
• writelines(sequence_of_strings) -> None. Write
the strings to the file.
Exempel: kopiera fil
inFile=file("input.txt", "r") #read
outFile=file("output.txt", "w") #write
fileContent=inFile.read() #all file as one string
outFile.write(fileContent) #write string
inFile.close() #close first file...
outFile.close() #...and the other
10