660 likes | 916 Views
Python. Značilnosti jezika Python. Izhaja iz ABC, Modul e -3 in C Objektno usmerjen Dinamični tipi Interpret iran Platformno neodvisen (Unix, Windows, itd .) Razširljiv Fle ksibilen. Najbolj vidna značilnost Python. Za krmilne strukture uporablja zamik. ne DO.. END
E N D
Značilnosti jezika Python • Izhaja iz ABC, Module-3 in C • Objektno usmerjen • Dinamični tipi • Interpretiran • Platformno neodvisen (Unix, Windows, itd.) • Razširljiv • Fleksibilen
Najbolj vidna značilnost Python Za krmilne strukture uporablja zamik ne DO.. END ne BEGIN..END ne { .. }
for i in range(20): if i%3 == 0: print i if i%5 == 0: print “Pozdravljen!" print "---" Zamik kot krmilna struktura 0 Pozdravljen --- --- --- 3 --- --- --- 6 --- --- --- 9 --- --- --- 12 --- --- --- 15 Pozdravljen! ---
“Programiranje je spet zabavno!" Nekaj misli z interneta: • “Sedaj, ko sem odkril Python, spet uživam v programiranju!“... • “Sedaj programiram v Javi, ker tako zahtevajo projekti, na katerih delam. Vendar bi si želel prej programirati v jeziku Ruby ali Python...." Robert C. Martin
Knjižnica Majhno jedro, obsežna knjižnica Podobno kot Java ima tudi Python kompaktno jedro in obsežno, razširljivo knjižnico. Tako je marsika, kar bomo potrebovali, že narejenega in preskušenega. Tako se naša naloga omeji na pisanje tiste kode, ki “zlepi” skupaj komponente iz knjižnice. Programiramo led to, kar potrebujemo.
"Doctor Fun has the dubious distinction of being the first web cartoon. Doctor Fun was not, however, the first cartoon on the Internet." - http://www.ibiblio.org/Dave/index.html
T-shirt Slogan Python: Programming the wayGuido indented it
Filozofija "Batteries included" Standardna distribucija vsebuje obsežno knjižnico modulov Na voljo je še veliko drugih modulov Orodja Python Frank Stajano
Namestitev programa Na spletni strani http://www.python.org/najdemo povezavo na Python, ga naložimo in namestimo. Opomba: Namestimo ga v standardni direktorij, kot predvideva namestitev Opomba: Namesto tega lahko namestimo ActivePython
Razvojno okolje IDLE • Lupina za interaktivno delo. • Urejevalnik teksta za tvorbo datotek Python. Nudi barvanje kode in avtomatske zamike. • Menujski ukazi za spreminjanje nastavitev sistema in za izvajanje datotek.
Interaktivna “lupina” • Lahkotno učenje jezika • Lahkotno preskušanje knjižnic • Lahkotno preskušanje lastnih modulov • Stavke tipkamo kot odgovor na “prompt”: >>> print “Pozdrav vsem" Pozdrav vsem >>> x = 12**2 >>> x/2 72 >>> # to je komentar
GUI – grafični uporabniški vmesniki Nizi Regularni izrazi Povezljivost s podatkovnimi bazami HTTP, CGI, HTML, XML Numeriče obdelave Razhroščevalnik objekti Standardna knjižnica Python
Orodja? – Integrirana razvojna okolja WingIDE Komericalen produkt Odličen IDE z vizualnim razhroščevalnikom Ni zastonj!
ActivePython • ActivePython je razvojno orodje Python za platforme Linux, Solaris in Windows. Je prosto dostopen. • ActivePython vsebuje jedro Python, razširitvi zlib in bzip2 za komprimiranje podatkov, podatkovno knjižnico bsddb in Tix GUI widgets za Tkinter. • Distribucija ActivePython vsebuje dokumentacijo za začetnike in izkušene programerje.
Jython - JPython • Jythonje implementacija jezika Pythonintegriranega s platformoJava. JPython je predhodnik Jythona. Jython je odprtokodno, prosto dostopno orodje. Jython je komplement Javi in posebno primeren za naslednje naloge: • Vgrajeni skripti – Programerji v Javi lahko dodajajo knjižnice Jython in tako omogočajo uporabnikom pisanje skript in tako dodajanje funkcionalnosti aplikacijam. • Interaktivno poskušanje - Jython nudi interaktivni interpreter, ki ga lahko uporabljamo za interakcijo s paketi Java ali za proženje javanskih aplikacij. Tako lahko programerji s pomočjo Jyton preskušajo in popravljajo različne aplikacije v Javi. • Hiter razvoj aplikacij – Programi v Pythonu so tipično 2-10 krat krajši od ekvivalentnih programov v Javi. To se neposredno preslika v produktivnost programerja. Programerji lahko med razvojem oba jezika prosto mešajo. • Prehod k Javi -Python in Jython nudita relativno neboleč prehod v zanimiv, vendar pogosto kompleksen svet Jave.
Visual Python • Python “plug-in”za Visual Studio .NET. • Visual Python smiselno integriran v Visual Studio .NET. Programerji lahko uporabljajo popularno Microsoftovo razvojno okolje. http://www.activestate.com/Products/Visual_Python
Vpython – Visual Python VPython združuje Python, Numerical Python, Tcl/Tk in grafični paket, ki temelji na OpenGL. Je enostaven sistem za programiranje 3D grafike v realnem času.
Visual Python (http://www.vpython.org) Interaktivne animacije Python je prost, interaktiven, objektno usmerjen jezik (spominja na Javo). Ima preprosto in konsistentno sintakso. Visual python (vpython) je Pythonov modul, ki izvaja 3D simulacije v realnem času. Crystal.py Simulacija kristala
Python - Fizika 1D kinematika 2D kinematika Dvojni pendulum Coriolis Giroskop z nutacijo Carnotov cikel
Python - Fizika Keplerjevo pravilo Gibanje planetov Orbiti Spekter Interferenca Valovanja
Python - Elektromagnetika Neskončen vodnik Gradimo električno polje Toroid
Python - Kemija Kristal
Python - matematika Vektorski produkt
Python - Grafika Vrtenine Lorenzov atraktor
Python - računalništvo Rekurzija
ScientificPython ScientificPython je zbirka Pythonovih modulov, primernih za znanstveno računanje. Ti moduli pokrivajo osnovno geometrijo (vektoje, tenzorje, transformacije, polja vektorjev in tenzorjev), kvaternione, odvode, interpolacijo, polinome, osnovno statistiko, nelinearno ujemanje najmanjših kvadratov, 3D vizualizacijo preko VRML in preprosto risanje grafov in 3D žičnih modelov. Ima mtudi vmesnike za knjižnice netCDF (portable structured binary files), MPI (Message Passing Interface, message-based parallel programming), in BSPlib (Bulk Synchronous Parallel programming). Več podrobnosti o ScientificPython dobimo na : http://starship.python.net/~hinsen/ScientificPython/
Tvorimo boljše programe hitreje s Pythonom Kako reševati probleme s Pythonom .... http://pythonology.org/
Kratek učbenik • Interaktivna “lupina" • Osnovni tipi: števila, nizi • Vsebovalniki: seznami, slovarji, tuples • Spremenljivke • Krmilne strukture • Funkcije in procedure • Razredi in primerki (instance) • Moduli in paketi • Izjeme • Datoteke in standardna knjižnica
Interaktivna “lupina” • Lahkotno učenje jezika • Lahkotno preskušanje knjižnic • Lahkotno preskušanje lastnih modulov • Stavke tipkamo kot odgovor na “prompt”: >>> print “Pozdrav vsem" Pozdrav vsem >>> x = 12**2 >>> x/2 72 >>> # to je komentar
Števila • Običajne stvari • 12, 3.14, 0xFF, 0377, (-1+2)*3/4**5, abs(x), 0<x<=5 • Pomikanje in maskiranje v stilu C • 1<<16, x&0xff, x|1, ~x, x^y • Celoštevilčno deljenje • 1/2 -> 0 # 1./2. -> 0.5, float(1)/2 -> 0.5 • Dolga cela števila, kompleksna števila • 2L**100 -> 1267650600228229401496703205376L • 1j**2 -> (-1+0j)
Nizi • "hello"+"world" "helloworld"# konkatenacija • "hello"*3 "hellohellohello"# ponavljanje • "hello"[0] "h"# indeksiranje • "hello"[-1] "o"# (od konca) • "hello"[1:4] "ell"# del • len("hello") 5# velikost • "hello" < "jello" 1# primerjanje • "e" in "hello" 1# iskanje • "escapes: \n etc, \033 etc, \if etc" • 'single quotes' """triple quotes""" r"raw strings"
Seznami • Fleksibilna polja, • a = [99, "bottles of beer", ["on", "the", "wall"]] • Isti operatorji kot za nize • a+b, a*3, a[0], a[-1], a[1:], len(a) • Prirejanje enot in delov enot • a[0] = 98 • a[1:2] = ["bottles", "of", "beer"] -> [98, "bottles", "of", "beer", ["on", "the", "wall"]] • del a[-1] # -> [98, "bottles", "of", "beer"]
Še več operacij s seznami >>> a = range(5) # [0,1,2,3,4] >>> a.append(5) # [0,1,2,3,4,5] >>> a.pop() # [0,1,2,3,4] 5 >>> a.insert(0, 42) # [42,0,1,2,3,4] >>> a.pop(0) # [0,1,2,3,4] 5.5 >>> a.reverse() # [4,3,2,1,0] >>> a.sort() # [0,1,2,3,4]
Slovarji • Hash tabele, "asociativna polja" d = {"duck": "eend", "water": "water"} • Lookup: d["duck"] -> "eend" d["back"] # sprozi KeyError exception • Delete, insert, overwrite: del d["water"] # {"duck": "eend", "back": "rug"} d["back"] = "rug" # {"duck": "eend", "back": "rug"} d["duck"] = "duik" # {"duck": "duik", "back": "rug"}
Še več operacij s slovarji • Ključi, vrednosti, elementi: d.keys() -> ["duck", "back"] d.values() -> ["duik", "rug"] d.items() -> [("duck","duik"), ("back","rug")] • Preverjanje prisotnosti: d.has_key("duck") -> 1; d.has_key("spam") -> 0 • Values of any type; keys almost any {"name":"Guido", "age":43, ("hello","world"):1, 42:"yes", "flag": ["red","white","blue"]}
Podrobnosti o seznamih • Ključev ne smemo spreminjati: • števila, nizi, tuples konstant • Po tvorbi jih ne smemo več spreminjati • Razlog jehashing (tehnika hitrega iskanja) • neseznami ali drugi slovarji • Te tipe objektov lahko spreminjamo “na mestu" • Ni omejitev pri vrednostih • Ključe lahko navajamo v poljubnem zaporedju • Spet zaradi hashing
Tuples ključ = (priimek, ime) tocka = x, y, z # lahko tudi z oklepaji x, y, z = tocka# razpakiranje lastname = key[0] singleton = (1,) # vejica na koncu!!! empty = () # oklepaji! V primerjavi tuples sseznami tuples niso spremenljivi
Spremenljivke • Ni potrebna deklaracija • Potreba po prirejanju (inicializacija) • Uporaba neinicializiranih spremenljivk povzroči izjemo • Ni tipov ifprijateljsko: pozdrav = “Dober dan" else: pozdrav = 12**2 printpozdrav • Vse so “spremenljivke": • Tudi funkcije, razredi, moduli
Pomen referenc • Prirejanje dela z referencami • x = y #ne naredi kopije y • x = y # x naslavljaobjekt, ki ga naslavlja y • Zelo uporabno; toda previdnost! • Primer: >>> a = [1, 2, 3] >>> b = a >>> a.append(4) >>> print b [1, 2, 3, 4]
Spreminjanje souporabljenega seznama a 1 2 3 1 2 3 a b a = [1, 2, 3] b = a a 1 2 3 a.append(4) 4 b
Spreminjanje celoštevilčnega podatka 1 a a = 1 a 1 b = a b new int object created by add operator (1+1) 2 a a = a+1 old reference deleted by assignment (a=...) 1 b
ifpogoj: stavki [elifpogoj: stavki] ... else: stavki whilepogoj: stavki forvarinzaporedje: stavki break continue Krmilne strukture
V jeziku Python: for i in range(20): if i%3 == 0: print i if i%5 == 0: print “Zadetek!" print "---" V jeziku C: for (i = 0; i < 20; i++) { if (i%3 == 0) { printf("%d\n", i); if (i%5 == 0) { printf(“Zadetek!\n"); } } printf("---\n"); } Zamik skupin 0 Zadetek! --- --- --- 3 --- --- --- 6 --- --- --- 9 --- --- --- 12 --- --- --- 15 Zadetek! --- --- --- 18 --- ---
Funkcije, Procedure def ime(arg1, arg2, ...): """dokumentacija""" # opcijski opis stavki return# iz procedure returnizraz# iz funkcije