Section 1

Preview this deck

in operator for key in tests:

Front

Star 0%
Star 0%
Star 0%
Star 0%
Star 0%

0.0

0 reviews

5
0
4
0
3
0
2
0
1
0

Active users

0

All-time users

0

Favorites

0

Last updated

6 years ago

Date created

Mar 1, 2020

Cards (52)

Section 1

(50 cards)

in operator for key in tests:

Front

primjer ugniježdenih petlji >>> items = ["aaa", 111, (4, 5), 2.01] # lista objekata >>> tests = [(4, 5), 3.14] # elementi koje tražimo >>> for key in tests: # za svaki ključ for item in items: # za svaki objekt if item == key: # provjera podudaranja print(key, "was found") break else: print(key, "not found") (4, 5) was found 3.14 not found isti primjer, elegantnije rješenje >>> for key in tests: if key in items: # prepustimo provjeru Pythonu print(key, "was found") else: print(key, "not found") (4, 5) was found 3.14 not found I u ovom primjeru koristi se operator in kako bi ispitao pripadnost - on implicitno prolazi kroz listu tražeći podudaranje i tako zamjenjuje unutrašnju petlju I općenito - dobro je prepustiti Pythonu da obavi čim veći dio posla, kako zbog jezgrovitosti kôda, tako i zbog performanse

Back

split / cutting --> regex?

Front

ako su polja odvojena graničnikom, primjenjuje se metoda split - rezultat je lista podnizova I ako se ne proslijedi argument, dijeljenje se obavlja ne prazninama (jedan ili više praznih znakova, tabova, prelezaka u novi red) >>> line = 'aaa bbb ccc' >>> cols = line.split( ) >>> cols ['aaa', 'bbb', 'ccc'] metoda split I ako se kao argument navede znakovni niz, on se koristi kao graničnik >>> line = 'bob,hacker,40' >>> line.split(',') ['bob', 'hacker', '40'] >>> line = "i'mSPAMaSPAMlumberjack" >>> line.split("SPAM") ["i'm", 'a', 'lumberjack'] izrezivanje i split rade vrlo brzo, obavljaju osnovnu ekstrakciju teksta mnoštvo drugih metoda nad stringovima metode ne prihvaćaju regularne izraze I koristi se modul re iz standardne biblioteke

Back

range function

Front

ugrađena funkcija range generira pobrojivi objekt (iterable) s cijelim brojevima I s jednim argumentom range generira niz cijelih brojeva počevši od 0 i ne uključujući sam argument I s dva argumenta - prvi argument određuje prvi broj niza I ako se navede i treći argument, on određuje korak >>> range(2, 5), type(range(2,5)) (range(2, 5), <class 'range'>) >>> list(range(5)), list(range(2,5)), list(range(0,10,2)) ([0, 1, 2, 3, 4], [2, 3, 4], [0, 2, 4, 6, 8]) raspon može uključivati i negativne brojeve, a može biti i silazan (negativan korak!) >>> list(range(-3, 3)), list(range(3, -3, -1)) ([-3, -2, -1, 0, 1, 2], [3, 2, 1, 0, -1, -2])

Back

while

Front

najopćenitija naredba programske petlje I izvršava se blok naredbi dok god je uvjet ispunjen I ako uvjet već na početku nije ispunjen, tijelo petlje se ne izvrši niti jednom općeniti oblik naredbe: while <test>: # uvjet <statements1> # tijelo else: # opcionalno <statements2> # ako nije završena s break dio else je opcionalan, a izvršava se ukoliko petlja nije prekinuta naredbom break primjeri >>> while 1: # beskonacna petlja print('Type Ctrl-C to stop me!') >>> x = 'spam' >>> while x: # dok je niz neprazan print(x, end=' ') x = x[1:] # odrezuje prvi znak spam pam am m >>> a=0; b=10 >>> while a < b: # petlja brojalica print(a, end=' ') a += 1 # isto kao a = a+1 0 1 2 3 4 5 6 7 8 9

Back

str list("spamm") explenation

Front

ako se primjenjuje veći broj uzastopnih operacija nad dugačkim znakovnim nizovima, nezgodno je što svaka operacija generira novi niz I ponekad se isplati pretvoriti string u izmjenljivi objekt - listu, kako bi se operacije obavljale na licu mjesta I ugrađena funkcija list (zapravo konstruktor liste) - formira novu listu na temelju objekta koji joj se predaje kao argument >>> S = 'spammy' >>> L = list(S) >>> L ['s', 'p', 'a', 'm', 'm', 'y'] >>> >>> L[3] = 'x' # radi s listama, ne sa stringovima >>> L[4] = 'x' >>> L ['s', 'p', 'a', 'x', 'x', 'y']

Back

zip dict and zip

Front

funkcija zip može se iskoristiti i za inicijalizaciju rječnika I recimo da imamo izgrađene liste ključeva i vrijednosti koje želimo upariti u rječniku >>> keys = ['spam', 'eggs', 'toast'] >>> vals = [1, 3, 5] >>> D2 = {} >>> for (k, v) in zip(keys, vals): D2[k] = v >>> D2 {'toast': 5, 'eggs': 3, 'spam': 1} I još bolje - konstruktoru rječnika može se predati lista kreirana funkcijom >>> D3 = dict(zip(keys, vals)) >>> D3 {'toast': 5, 'eggs': 3, 'spam': 1}

Back

n-torke, list(), tuple()

Front

Operacija Opis ( ) prazna n-torka t1 = (0,) jednočlana n-torka (!) t2 = (0, 'Ni', 1.2, 3) četveročlana n-torka t2 = 0, 'Ni', 1.2, 3 može i ovako t3 = ('abc', ('def', 'ghi')) ugniježdene n-torke t1[0] ; t3[1][1] indeksiranje t2[1:3] ; len(t2) izrezivanje, duljina t1 + t2 ; t2 * 3 ulančavanje, ponavljanje for x in t2 ; 3 in t2 iteracija, pripadnost

Back

lists empty, tri elemets, indexs, len, iterate, append, extend, sort, index, revers, del, pop

Front

Operacije nad listama tablica - liste: literali i (neke) operacije Operacija Opis L1 = [ ] prazna lista L2 = [0, 1, 2, 3] četiri elementa, indeksi 0..3 L3 = ['abc', ['def', 'ghi']] ugniježdena podlista L2[i] ; L3[i][j] indeksiranje L2[i:j] ; len(L2) izrezivanje, određivanje duljine L1 + L2 ; L2 * 3 ulančavanje, ponavljanje for x in L2 ; 3 in L2 iteriranje, pripadnost L2.append(4) metode: dodavanje elemenata L2.extend([5,6,7]) L2.sort( ) ; L2.index(1) sortiranje, pretraživanje,... L2.reverse( ) del L2[k] ; del L2[i:j] ; brisanje L2.pop( ) ; L2[i:j] = [ ] L2[i] = 1 ; L2[i:j] = [4,5,6] pridruživanje vrijednosti

Back

str. find result

Front

zamjena prve pojave podniza >>> S = 'xxxxSPAMxxxxSPAMxxxx' >>> where = S.find('SPAM') # traži položaj (indeks) >>> where # indeks je 4 4 I metoda find vraća indeks na kojem započinje traženi podniz, ili -1 ako podniz nije pronađen >>> S = S[:where] + 'EGGS' + S[(where+4):] >>> S 'xxxxEGGSxxxxSPAMxxxx'

Back

functions

Front

primjer funkcije >>> def times(x, y): return x * y # tijelo se izvodi pri pozivu poziv funkcije >>> times(2, 4) # argumenti u zagradama 8 rezultat se može pohraniti >>> x = times(3.14, 4) >>> x 12.56 tip argumenata nije zadan >>> times('Ni', 4) 'NiNiNiNi'

Back

index starting from the right

Front

[-2]

Back

list append

Front

liste imaju specifične metode metoda append - dodavanje jednog elementa na kraj liste >>> L = ['eat', 'more', 'SPAM!'] >>> L.append('please') # dodavanje jednog elementa >>> L ['eat', 'more', 'SPAM!', 'please'] I efekt izraza L.append(X) je sličan kao L+[X], ali drugi izraz stvara novu listu - append je obično brže I append mijenja listu na licu mjesta, a ne vraća listu kao rezultat ! L=L.append(X) će obrisati referencu na listu! >>> L = L.append('X') # PAZI! vraća None >>> L # objekt None se ne ispisuje >>> repr(L) # eksplicitno tražim reprezentaciju 'None'

Back

str are not immutable

Front

znakovni nizovi su nepromjenljive (immutable) sekvence ! ne mogu se mijenjati (npr. dodjeljivanjem vrijednosti nekom elementu preko indeksa) >>> S = 'spam' >>> S[0] = "x" # probajmo izmijeniti ... TypeError: 'str' object does not support item assignment kako bismo izmijenili znakovni niz, moramo kreirati novi niz s izmijenjenim sadržajem, uz eventualno pridjeljivanje imenu izvornog stringa >>> S = S + 'SPAM!' # kreira se novi string! >>> S 'spamSPAM!' >>> S = S[:4] + 'Burger' + S[-1] >>> S 'spamBurger!'

Back

set delete, add,update in

Front

dodavanje elemenata u skup >>> skup.add('jagoda') >>> skup {'šljiva', 'jagoda', 'kruška', 'jabuka'} >>> skup.update(['smokva','dinja']) >>> skup {'šljiva', 'smokva', 'kruška', 'jagoda', 'jabuka', 'dinja'} ispitivanje pripadnosti, odnosno podskupova >>> 'smokva' in skup True >>> {'šljiva', 'smokva', 'dinja'} <= skup #podskup True brisanje elemenata >>> skup.remove('jagoda') >>> skup {'šljiva', 'smokva', 'kruška', 'jabuka', 'dinja'} >>> skup.pop() # vadi proizvoljni element 'smokva' >>> skup.clear() # briše sve >>> skup set()

Back

str how to call a function and method

Front

izraz oblika objekt.atribut dohvaća vrijednost atributa u objektu izraz oblika objekt.funkcija(argumenti) poziva metodu

Back

zip function

Front

ugrađena funkcija zip omogućava paralelno iteriranje kroz više sekvenci I funkcija kao argumente prima jednu ili više sekvenci, a vraća iterator n-torki koje uparuju/združuju elemente tih sekvenci >>> L1 = [1,2,3]; L2 = [5,6,7] >>> z = zip(L1,L2) >>> type(z) <class 'zip'> >>> list(z) [(1, 5), (2, 6), (3, 7)] I rezultat može poslužiti za istovemeni prolazak kroz obje sekvence >>> for (x,y) in zip(L1, L2): print(x, y, '--', x+y) 1 5 -- 6 2 6 -- 8 3 7 -- 10

Back

changer

Front

ako želimo spriječiti izmjenu izmjenljivih objekata proslijeđenih u funkciju, možemo proslijediti eksplicitnu kopiju >>> lista = [1, 2] >>> changer(broj, lista[:]) # prosljeđuje se kopija kopiju može napraviti i sama funkcija >>> def changer(prvi, drugi): drugi = drugi[:] # kopija! prvi = 2 drugi[0] = 'burek' # izmjena na kopiji možemo i objekt pretvoriti u nepromjenljivi >>> changer(broj, tuple(lista)) # n-torka ... TypeError: 'tuple' object does not support item assignment I upozorenje: izvorna lista može sadržavati i promjenljive objekte - niti kopija niti pretvorba u n-torku ne može spriječiti mijenjanje tih ugniježdenih objekata!

Back

dictionaries values and items

Front

slično, metoda values() vraća vrijednosti pohranjene u rječniku >>> for val in D.values(): print(val, end=' ') 2 4 3 metoda items() vraća parove (ključ, vrijednost) >>> for item in D.items(): print(item, end=' ') ('a', 2) ('c', 4) ('b', 3) ispitivanje postojanja ključa u rječniku postiže se operatorom in >>> 'c' in D True

Back

dictionary update

Front

metoda update() nudi funkcionalnost sličnu ulančavanju - ključevi i vrijednosti jednog rječnika spajaju se s drugim rječnikom I vrijednosti s istim ključem se pritom prepisuju >>> d2 = {'eggs':3, 'ham':1, 'spam':2} >>> d3 = {'toast':4, 'muffin':5, 'eggs':7} >>> d2 + d3 # ovo neće ići ...TypeError: unsupported operand type(s) for +: 'dict' and 'dict' >>> d2.update(d3) >>> d2 {'toast': 4, 'ham': 1, 'spam': 2, 'muffin': 5, 'eggs': 7}

Back

slicing

Front

S[1:3], S[1:], S[:-1]

Back

creat a dictionary, len, print key's

Front

stvaranje rječnika i pristup elementima (vrijednostima) >>> d2 = {'spam': 2, 'ham': 1, 'eggs': 3} >>> d2['spam'] # dohvat vrijednosti na temelju kljuca 2 >>> d2 # redoslijed je nepredvidljiv {'eggs': 3, 'ham': 1, 'spam': 2} redoslijed elemenata je različit od onog kojim su elementi uneseni - zbog implementacije brzog dohvata (hashing) I operacije nad sekvencama (izrezivanje, nadovezivanje) ne mogu se primjenjivati na rječnicima ugrađena funkcija len() primjenjiva je na rječnike - vraća broj pohranjenih elemenata >>> len(d2) metoda keys() vraća "listu" svih ključeva rječnika I zapravo se ne radi o listi nego o tzv. pobrojivom tipu (iterable) - objektu kroz koji se može iterirati >>> D = { 'a': 2, 'b':3, 'c':4} >>> L = D.keys() >>> L dict_keys(['a', 'c', 'b']) >>> type(L) <class 'dict_keys'> >>> for i in L: print(i, end=' ') a c b i kroz sam rječnik može se iterirati (iterira se kroz ključeve) >>> for i in D: print("{}:{} ;".format(i, D[i]), end = ' ') a:2 ; c:4 ; b:3 ;

Back

filehandling

Front

out = open('/tmp/spam', 'w') otvara datoteku za pisanje in = open('bla.txt', 'r') otvara datoteku za čitanje S = in.read( ) učitava cijelu datoteku S = in.read(N) čita N bajtova S = in.readline( ) učitava sljedeći redak L = in.readlines( ) cijelu datoteku u listu L out.write(S) zapisuje znakovni niz out.writelines(L) zapisuje stringove iz liste out.close( ) zatvaranje datoteke

Back

names to arguments

Front

pozicijsko i imenovano povezivanje argumenata >>> def f(a, b, c): print(a, b, c) >>> f(1, 2, 3) # pozicijsko povezivanje 1 2 3 >>> f(c=1, b=3, a=2) # povezivanje imenom 2 3 1 >>> f(3, c=2, b=1) # miješano 3 1 2 I broj argumenata u pozivu mora odgovarati broju argumenata u definiciji funkcije I u slučaju miješanog povezivanja imena, najprije se dodjeljuju pozicijski argumenti, s lijeva udesno >>> f(3, c=2, a=1) # ne valja! TypeError: f() got multiple values for keyword argument 'a'

Back

hashes overview

Front

Operacija Opis D1 = { } prazni rječnik D2 = {'spam': 2, 'eggs': 3} rječnik s dva elementa d3 = {'food': {'ham': 1,'egg': 2}} gniježdenje D2['eggs']; d3['food']['ham'] indeksiranje ključem 'eggs' in D2 pripadnost D2.keys( ) ; D2.values( ) ključevi, vrijednosti D2.copy( ) ; D2.get('cake',0) kopiranje ... len(D1) duljina D2['apple'] = 42 ; del D2['eggs'] dodavanje; brisanje Skriptni jezici,

Back

printf codes

Front

Python preopterećuje binarni operator "%" - kada se primjeni na znakovne nizove, obavlja ulogu poput funkcije sprintf u C-u I jednostavno formatiranje vrijednosti u znakovne nizove I lijevo od operatora "%" navodi se formatni niz u kojem se definiraju pretvorbe podataka I na desnoj strani se navodi objekt, ili više objekata u zagradama (n-torka), koje želimo umetnuti u konačni znakovni niz I tehnički gledano, isti rezultat možemo ostvariti ulančavanjima i pretvorbama, no formatiranje mogućava obavljanje većeg broja koraka kroz jednu operaciju >>> ime = "Fiona" >>> "The knight loves %s." % ime 'The knight loves Fiona.' >>> "%d %s %d you" % (1, 'spam', 4) '1 spam 4 you' svaki tip objekta može se pretvoriti u string >>> "%s -- %s -- %s" % (42, 3.14159, [1, 2, 3]) '42 -- 3.14159 -- [1, 2, 3]' za formatiranje raznih tipova podataka na raspolaganju je cijeli niz formatskih kodova - kao u C funkciji printf tablica formatskih kôdova Kôd Opis %s znakovni niz, ili bilo koji objekt %r kao %s, ali koristi repr( ), a ne str( ) %c znak %d dekadski cijeli broj

Back

str. replace

Front

zamjena podniza u znakovnom nizu - metoda replace >>> S = 'spammy' >>> S = S.replace('mm', 'xx') >>> S 'spaxxy' metoda replace obavlja globalnu zamjenu >>> 'aa$bb$cc$dd'.replace('$', 'SPAM') 'aaSPAMbbSPAMccSPAMdd' jednostruka zamjena može se postići metodom replace, uz dodavanje trećeg argumenta (broj zamjena) >>> S = 'xxxxSPAMxxxxSPAMxxxx' >>> S.replace('SPAM', 'EGGS', 1) # jedna zamjena! 'xxxxEGGSxxxxSPAMxxxx' I još jednom: stvara se novi string!

Back

dictionary and list

Front

ključ ne mora biti znakovni niz - može biti bilo koji nepromjenljivi tip, npr. cijeli broj pridruživanje vrijednosti nepostojećem elementu liste nije dozvoljeno >>> L = [] >>> L[99] = 'spam' ... IndexError: list assignment index out of range mogli bismo alocirati veliku listu primjenom operatora ponavljanja: npr. L = [0]*100, ali nešto slično možemo postići rječnikom korištenjem cjelobrojnog ključa možemo oponašati listu koja raste prema potrebi >>> D = {} >>> D[99] = 'spam' >>> D[99] 'spam' >>> D {99: 'spam'} I izgleda kao lista od 100 elemenata, a zapravo je rječnik s jednim elementom

Back

for range

Front

Funkcija range (2) kroz generirani raspon može se iteirati petljom for >>> for i in range(3): print(i, 'Pythons') 0 Pythons 1 Pythons 2 Pythons može se koristiti i za indeksiranje elemenata liste >>> L = [1, 2, 3, 4, 5] >>> for i in range(len(L)): L[i] += 1 >>> L [2, 3, 4, 5, 6]

Back

statemens on more than one line

Front

pisanje naredbe kroz više redaka moguće je i označavanjem nastavljanja znakom "\" X = A + B + \ C + D I zastarjelo, nepopularno u "Pythonlandu" I teško je uočiti "\", ne smije biti praznina nakon oznake još jedan izuzetak - složene naredbe u jednom retku if x > y: print(x) I dozvoljeno pisanje naredbi if, ili kratkih petlji u jednom retku I najčešća primjena - prijevremeni izlazak iz petlje (break)

Back

list comprohenstion listaKvadrata = [] >>> for x in range(1,11): listaKvadrata.append(x**2) >>> listaKvadrata [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Front

list comprehension - sažet način za stvaranje liste I kreiranje nove liste kao rezutata neke operacije nad članovima neke druge sekvence I priprema podsekvence na temelju nekog uvjeta primjer >>> listaKvadrata = [] >>> for x in range(1,11): listaKvadrata.append(x**2) >>> listaKvadrata [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] isti rezultat možemo postići izrazom: >>> listaKvadrata = [x**2 for x in range(1,11)] >>> listaKvadrata = [x**2 for x in range(1,11)]

Back

tuple for loop

Front

ako se prolazi kroz sekvencu n-torki, varijabla petlje može biti n-torka varijabli >>> T = [(1, 2), (3, 4), (5, 6)] >>> for (a, b) in T: # tuple assignment print(a, b) 1 2 3 4 5 6

Back

end=' '

Front

not printing the newline

Back

set class type

Front

kreiranje skupa I Python 3 >>> skup = {'kruška', 'jabuka', 'šljiva'} >>> skup {'šljiva', 'kruška', 'jabuka'} >>> type(skup) <class 'set'> Python 2 i 3 - ugrađena funkcija set() stvara skup na temelju liste >>> set(['kruška', 'jabuka', 'šljiva']) {'šljiva', 'kruška', 'jabuka'} I može i na temelju n-torke (zapravo trebamo pobrojivi tip) >>> set(('kruška', 'jabuka', 'šljiva')) {'šljiva', 'kruška', 'jabuka'} >>> d2 = {'toast': 4, 'ham': 1, 'eggs': 7} >>> set(d2.values()) {1, 4, 7} I ovako ne može (traži se jedan argument) >>> skup = set('kruška', 'jabuka', 'šljiva') ... TypeError: set expected at most 1 arguments, got 3

Back

join

Front

nakon obavljenih izmjena, listu možemo "spakirati" nazad u string primjenom metode join >>> S = ''.join(L) # "uvlači" listu u string >>> S 'spaxxy' join je metoda znakovnih nizova, a poziva se preko željenog graničnika I znakovni nizovi iz liste povezuju se u jedan niz, pri čemu se između njih umeće niz koji je naveden kao graničnik >>> 'SPAM'.join(['eggs', 'sausage', 'ham', 'toast']) 'eggsSPAMsausageSPAMhamSPAMtoast'

Back

set difference, union, one thing

Front

>>> voće = {'breskva', 'jabuka', 'rajčica'} >>> povrće = {'rajčica', 'kupus', 'blitva'} >>> voće | povrće # unija {'jabuka', 'blitva', 'breskva', 'rajčica', 'kupus'} >>> voće & povrće # presjek {'rajčica'} >>> voće - povrće # razlika {'breskva', 'jabuka'}

Back

joining two lists

Front

iako ulančavanja djeluje na liste i na znakovne nizove, očekuje se isti tip sekvence na obje strane operatora - inače greška I ne možemo ulančavati listu sa znakovnim nizom, osim ako najprije pretvorimo listu u znakovni niz (pomoću funkcije str) ili znakovni niz u listu (pomoću funkcije list) >>> L=[1, 2] >>> L + "34" ... TypeError: can only concatenate list (not "str") to list >>> str(L) + "34" # kao "[1, 2]" + "34" '[1, 2]34' >>> L + list("34") # kao [1, 2] + ["3", "4"] [1, 2, '3', '4']

Back

pythone len

Front

len(something)

Back

global

Front

naredba global je deklaracija koja se odnosi na programski blok I iza ključne riječi global navode se imena varijabli odvojena zarezima I navedena imena se mapiraju u doseg obuhvaćajućeg modula (globalni doseg) >>> X = 88 # globalno ime >>> def func( ): global X X = 99 # sada mijenja globalnu varijablu >>> func() >>> X # globalna varijabla je izmijenjena 99 naredba global mapira imena u globalni, a ne u obuhvaćajući doseg >>> def vanjska(): x = 1 def unutarnja(): global x # doseg modula! x = 2 print("unutarnja:", x) unutarnja() print("vanjska:", x) >>> vanjska() unutarnja: 2 vanjska: 1 >>> x # ovo je globalni x 2

Back

break and continiu

Front

rimjeri while 1: pass # Type Ctrl-C to stop me! >>> x = 10 >>> while x: x = x-1 # ili x -= 1 if x % 2 != 0: continue # preskoči neparne print (x, end=' ') 8 6 4 2 0 >>> while 1: broj = input("Upiši broj (ili 'stop'): ") if broj == 'stop': break print('kvadrat broja', broj, 'je', int(broj) ** 2)

Back

str(), float(), inte()

Front

explained

Back

list extend, pop, reverse

Front

metoda extend - dodavanje liste elemenata na kraj liste >>> L = [1, 2] >>> L.extend([3,4,5]) # dodavanje liste elemenata >>> L [1, 2, 3, 4, 5] metoda pop - briše i vraća zadnji element >>> L.pop( ) # briše i vraća zadnji element 5 >>> L [1, 2, 3, 4] metoda reverse - okreće redoslijed elemenata (iste!) liste >>> L.reverse( ) >>> L [4, 3, 2, 1]

Back

list sort

Front

metoda sort - sortiranje liste na licu mjesta (vraća None!) >>> L = [21, 14, 77, 11, 7] >>> L.sort() >>> L [7, 11, 14, 21, 77] >>> L = ["Pero", "Marko", "Zdenka", "Matej"] >>> L.sort() >>> L ['Marko', 'Matej', 'Pero', 'Zdenka'] naravno, elementi moraju biti međusobno usporedivi >>> L = ['Pero', 77, 'Marko', 123, 'Matej'] >>> L.sort() ... TypeError: unorderable types: int() < str() ugrađena funkcija sorted I konstruira i vraća novu sortiranu listu elemenata zadanog objekta kroz koji se može iterirati (iterable) I osim na liste primjenjiva je i na rječnike, n-torke, skupove,... >>> # velika slova prije malih >>> sorted(["Pero", "marko", "zdenka", "Matej"]) ['Matej', 'Pero', 'marko', 'zdenka'] dodatni argument key određuje funkciju koja se poziva za svaki element prije usporedbe (vrijedi i za metodu sorted) >>> # pretvorba u mala slova >>> sorted(["Pero", "marko", "zdenka", "Matej"], key=str.lower) ['marko', 'Matej', 'Pero', 'zdenka']

Back

if statements on one line

Front

if x > y : # zaglavlje x = 1 # ugniježdeni blok y = 2 u jedan redak možemo "ugurati" više jednostavnih naredbi a = 1; b = 2; print(a + b)

Back

for loop dictionary

Front

primjer - podaci o autorima skriptnih jezika >>> table = {'Python': 'Guido van Rossum', 'Perl': 'Larry Wall', 'Tcl': 'John Ousterhout' } >>> language = 'Python' >>> creator = table[language] >>> creator 'Guido van Rossum' >>> for lang in table.keys( ): print(lang, '\t', table[lang]) Python Guido van Rossum Tcl John Ousterhout Perl Larry Wall

Back

dictionary mutable

Front

rječnici su izmjenljivi (mutable) objekti I mogu se mijenjati, proširivati ili smanjivati bez stvaranja kopije >>> d2 {'eggs': 3, 'ham': 1, 'spam': 2} >>> d2['ham'] = ['grill', 'bake', 'fry'] # izmjena >>> d2 {'eggs': 3, 'ham': ['grill', 'bake', 'fry'], 'spam': 2} >>> del d2['eggs'] # brisanje >>> d2 {'ham': ['grill', 'bake', 'fry'], 'spam': 2} >>> d2['brunch'] = 'Bacon' # dodavanje elementa >>> d2 {'brunch': 'Bacon', 'ham': ['grill', 'bake', 'fry'], 'spam': 2}

Back

names to arg tuple and dictionaries

Front

drugi oblik radi samo za pridruživanje argumenata imenom, a argumenti se prikupljaju u rječnik >>> def f(**args): print(args) >>> f() {} >>> f(a=1, b=2) {'a': 1, 'b': 2} moguće je i kombiniranje >>> def f(a, pargs, *kargs): print(a, pargs, kargs) >>> f(1, 2, 3, x=1, y=2) 1 (2, 3) {'y': 2, 'x': 1} >>> >>> f(1, 2, 3, x=1, y=2, 4, 5) # ovo ipak ne ide SyntaxError: non-keyword arg after keyword arg

Back

file with why whith?

Front

u novijim programima u Pythonu uobičajeno je korištenje mogućnosti automatskog zauzimanja i otpuštanja resursa naredbom with (objekt s kojim se radi mora biti tome prilagođen) pri baratanju datotekama, na taj se način osigurava njeno automatsko zatvaranje i u slučaju iznimke koristi se idiom: >>> with open('tekst2.txt', encoding='utf8') as dat: pročitano = dat.read() >>> pročitano 'prvi redak
2. red
3. retčić
' možemo provjeriti je li datoteka zatvorena >>> dat.closed # datoteka je zatvorena automatski True

Back

dictionary get and pop

Front

pokušaj dohvata preko nepostojećeg ključa rezultira greškom, no može se koristiti metoda get() koja u tom slučaju vraća pretpostavljenu vrijednost (None ili vrijednost koja se prosljeđuje kao argument) >>> d2 = {'brunch': 'Bacon', 'ham': 7, 'spam': 2} >>> d2['salt'] ... KeyError: 'salt' >>> d2.get('salt'),d2.get('salt',33),d2.get('spam',11) (None, 33, 2) metoda pop() briše element iz rječnika i vraća njegovu vrijednost >>> d2 = {'toast':4, 'eggs':3, 'ham':1, 'spam':2} >>> d2.pop('toast') 4 >>> d2 {'eggs': 3, 'ham': 1, 'spam': 2}

Back

printf format (index, no index, names)

Front

a = 2 >>> b = 3 >>> print( # promiješan redoslijed "Zbroj brojeva {1} i {2} je {0}".format(a + b, a, b)) Zbroj brojeva 2 i 3 je 5 ako se argumenti umeću redom navođenja, indeksi nisu obavezni >>> print( # bez miješanja "Zbroj brojeva {} i {} je {}".format(a, b, a + b)) Zbroj brojeva 2 i 3 je 5 drugi način navođenja argumenata je pomoću imena >>> "{umanjenik} - {umanjitelj} = {razlika}".format( razlika=a-b, umanjitelj=b, umanjenik=a) '2 - 3 = -1' metoda format omogućuje upravljanje širinom polja i poravnanjem podataka - sintaksa donekle podsjeća na printf I oznaka se navodi unutar vitičastih zagrada, nakon oznake argumenta, odvojena dvotočkom >>> print("|{:10s}|{:10d}|{:10.2f}|".format( "Znakovi",123,543.1234)) |Znakovi | 123| 543.12| upravljanje poravnanjem I podrazumijevano poravnanje za znakovne nizove je lijevo, a za brojeve desno I oznaka za lijevo poravnanje je "<", za desno ">", za centriranje "^" >>> print("|{:>10s}|{:^10d}|{:<10.2f}|".format( "Znakovi",123,543.1234)) | Znakovi| 123 |543.12 |

Back

change list items

Front

Izmjena liste liste su izmjenljivi objekti - mogu se mijenjati na licu mjesta, bez stvaranja kopije kako Python radi s referencama, izmjena objekta utječe i na druge reference na taj objekt! sadržaj liste može se izmijeniti pridjeljivanjem vrijednosti pojedinom elementu ili cijelom isječku (slice) >>> L = ['spam', 'Spam', 'SPAM!'] >>> L[1] = 'eggs' # Index assignment >>> L ['spam', 'eggs', 'SPAM!'] >>> L[0:2] = ['eat', 'more'] # Slice assignment >>> L ['eat', 'more', 'SPAM!'] pridjeljivanje vrijednosti isječku ponaša se kao brisanje i umetanje (broj elemenata koji se umeće ne mora odgovarati broju elemenata koji se brišu) >>> L = [1, 2, 3] >>> L[1:2]=[4,5] >>> L [1, 4, 5, 3] >>> L[1:3]=[ ] # brisanje elemenata >>> L [1, 3] funkcionira i u slučaju preklapanja isječka s vrijednostima i isječka kojem se dodjeljuju vrijednosti >>> L = [1, 2, 3, 4, 5, 6, 7, 8] >>> L[2:5]=L[3:6] >>> L [1, 2, 4, 5, 6, 6, 7, 8]

Back

Section 2

(2 cards)

lambda

Front

lambda izrazi omogućavaju generiranje funkcijskih objekata izrazom - bez definicije i bez imena (anonimna funkcija) I izraz a ne naredba - može se pojaviti na mjestima gdje sintaksa ne dozvoljava def, npr. unutar liste ili u pozivu funkcije I kao izraz, lambda vraća vrijednost (novu funkciju), kojoj se može dodijeliti ime (ali i ne mora) opći oblik: lambda argument1, argument2,... argumentN : izraz I nakon ključne riječi lambda navode se argumenti, koji se koriste u izrazu I generirana funkcija radi jednako kao i funkcija stvorena naredbom def I tijelo lambda funkcije je jedan izraz ! ograničena funkcionalnost

Back

why lambda

Front

čemu uopće lambda izrazi ? I način da ugradimo definiciju funkcije unutar kôda koji ju koristi - npr. povratne funkcije (callback handlers) kodirane kao lambda izrazi u samom pozivu za registriranje I tablice grananja pohranjene u listi ili rječniku >>> L = [(lambda x: x*2), (lambda x: x*3), (lambda x: x**4)] >>> for f in L: print(f(2), end=' ') 4 8 16 >>> L[0](3) 9 I ostvarenje višestrukog grananja rječnikom: >>> key = 'got' >>> {'already': (lambda: 2 + 2), 'got': (lambda: 2 * 4), 'one': (lambda: 2 ** 6)}[key]()

Back