W Pythonie typowanie jest dynamiczne, tzn. interpreter rozpoznaje typ zmiennej na podstawie jej wartości. Typy proste Typy złożone Listy Krotki Zbiory Słowniki
import sys sys.maxintDopuszczalne są cztery systemy liczbowe:
z = 15 z = 0xF z = 0o17 z = 0b1111Powyższe instrukcje nadają zmiennej z wartość 1510. Stsosowane są kolejno: system dziesiętny, szesnastkowy, ósemkowy i dwójkowy.
z = 23L z = long(23)
z = complex(1,1) z = 1+1jkażda z powyższych instrukcji tworzy zmienną zespoloną z o wartości 1+i
a = True b = 2 if a and b: print "tak" => tak if a or b: print "tak" => tak
s = "Jan powiedział: 'basta'" t = 'Jan powiedział: "basta"' t == s => TruePotrójnych ograniczników używamy gdy chcemy napis umieścić w kilku wierszach.
s="""W tym wierszu jest początek napisu a w tym jego koniec""" s => 'W tym wierszu jest pocz\xb9tek napisu\na w tym jego koniec'Napisy możemy łączyć przy pomocy operatora konkatenacji +, nie ma niejawnych konwersji na typ str
x = 34 "x = "+str(x) => 'x = 34'Dostęp do pojedynczych znaków napisu daje nam operator []. Argument operatora [] może być liczbą ujemną! Każdy znak w napisie s ma dwa indeksy:
s = "Hokus-pokus" s[-2] => 'u' s[5] => '-' s[5] = "+" Traceback (most recent call last): File "Dostęp do większych fragmentów napisu daje nam operator zakresu [od:do]. Operator zakresu działa również (i działa identycznie!) na omówionych dalej typach złożonych: listach i krotkach.", line 1, in s[5] = "+" TypeError: 'str' object does not support item assignment
s = "0123456789" s[3:3] => '' s[2:4] => '23' s[:6] => '012345' s[6:] => '6789' s[-3:9] => '78' s[-4:] => '6789'Napis (zmienna s typu str) jest obiektem, istnieje wiele użytecznych metod w klasie str, poniżej niepełna lista w porządku alfabetycznym, w kilku przypadkach pominięte zostały nieobowiązkowe argumenty modyfikujące działanie metod:
s="aaaa" s.count("a") => 4 s.count("aa") => 2 s.count("aaa") => 1
".".join("salceson") => 's.a.l.c.e.s.o.n' "+".join([str(i) for i in range(1,21)]) => '1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20'w drugim przykładzie wykorzystałem funkcję range(a,b) (a i b są typu int), zwraca ona listę zawierającą liczby całkowite od a do b-1, wykorzystałem też jedną z postaci pętli for, zostanie ona omówiona później,
"ababa".replace("aba","cc") => 'ccba'
"ababa".split("a") => ['', 'b', 'b', '']
l1 = list() l2 = [] l3 = [1,2,True,"wojna"]pierwsze dwie instrukcje tworzą pustą listę, trzecia tworzy listę czteroelementową, rozmiar listy możemy odczytać wywołując funkcję globalną len, len(l3) => 4.
m1 = [1,2] m2 = [3,4] m3 = [1,2] l = [m1, m2, m3] l => [[1, 2], [3, 4], [1, 2]] l.remove(m3) l => [[3, 4], [1, 2]]wynika to z faktu, że przy porównywaniu obiektów (kolekcji) porównywana jest ich zawartość, a nie referencje,
l=[False, True, 0, 3, 0.1, 3.5, complex(1,1), "Moby", "Dick", [1,2,3]] l.sort() Traceback (most recent call last): File "", line 1, in l.sort() TypeError: no ordering relation is defined for complex numbers l.pop(6) l.sort() l => [False, 0, 0.1, True, 3, 3.5, [1, 2, 3], 'Dick', 'Moby']
l = [1,2] m = l*5 m => [1, 2, 1, 2, 1, 2, 1, 2, 1, 2] m = l*(-5) m => []jak widać, nie ma błędu wykonania gdy k jest ujemne.
l = range(10) l => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] x,y = l[8:] #rozpakowanie x => 8 y => 9ilość zmiennych po lewej stronie musi być równa długości listy po prawej stronie, do zmiennych są przypisywane kolejne elementy listy. Po lewej stronie może też wystapic tylko jedna zmienna, nie ma wtedy rozpakowania, tylko utworzenie nowej listy.
l = range(10) x = l[4:] x => [4, 5, 6, 7, 8, 9] x = l[9:] x => [9] x = l[9] x => 9
k1 = tuple() k2 = () k3 = 1,2,True,"Jan" k4 = (1,2,True,"Jan")pierwsze dwie instrukcje tworzą pustą krotkę (tworzenie takiej krotki jest bez sensu, bo już jej nie zmienimy), trzecia i czwarta tworzą krotkę czteroelementową, rozmiar krotki możemy odczytać wywołując funkcję globalną len, len(k3) => 4.
l = [1,2,3] k = (4,5,6) l + k Traceback (most recent call last): File "", line 1, in l + k TypeError: can only concatenate list (not "tuple") to list l + list(k) => [1, 2, 3, 4, 5, 6] tuple(l) + k => (1, 2, 3, 4, 5, 6)
z1 = set() #powstał zbiór pusty z2 = set("sakwa") #powstał zbiór czteroelementowy zawierający litery 's', 'a', 'k' i 'w' z3 = set(range(1,11)) #powstał zbiór zawierający liczby od 1 do 10Metody w klasie set:
def addToSet(zbior,element): bylo = len(zbior) zbior.add(element) return len(zbior)>bylo
if element in z: z.remove(element)
d = dict() #powstał pusty słownik d = {"one":"jeden","two":"dwa","three":"trzy"} #powstał skromny słownik angielsko-polskiOperacje na słowniku:
d["four"] = "ctery" d["four"] = "cztery" d["four"] => 'cztery'
d = {"jeden":1,"dwa":2} d.items() => [('jeden', 1), ('dwa', 2)]