Uwe Geuder Tampereella 26. elokuuta 2010

Samankaltaiset tiedostot
Ohjelmoinnin perusteet Y Python

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

ELM GROUP 04. Teemu Laakso Henrik Talarmo

815338A Ohjelmointikielten periaatteet

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

linux linux: käyttäjän oikeudet + lisää ja - poistaa oikeuksia

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Python Perusteet Materiaalia

Ohjelmoinnin perusteet Y Python

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Ohjelmoinnin perusteet Y Python

Tech Conference Visual Studio 2015, C#6,.NET4.6. Heikki Raatikainen. #TechConfFI

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin perusteet Y Python

Ohjelmointi 1 C#, kevät 2013, 2. tentti

Groovy. Samuli Haverinen, Aki Hänninen. 19. marraskuuta 2015

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin perusteet Y Python

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Ohjelmoinnin peruskurssien laaja oppimäärä

Python-luento. Jonne Itkonen April 11, It s Laskentaa Muuttujista Muita tietotyyppejä... 4

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssien laaja oppimäärä

Perintä (inheritance)

Kokeellista matematiikkaa SAGE:lla

Harjoitus 3 (viikko 39)

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Johdatus Python-kieleen

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Ohjelmoinnin peruskurssien laaja oppimäärä

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

TIE Principles of Programming Languages CEYLON

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Listarakenne (ArrayList-luokka)

TIETORAKENTEET JA ALGORITMIT

ASCII-taidetta. Intro: Python

Ohjelmoinnin peruskurssien laaja oppimäärä

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Pythonilla. Teemu Sirkiä, 2015

Harjoitustyö: virtuaalikone

Harjoitus 5 (viikko 41)

4. Luokan testaus ja käyttö olion kautta 4.1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssien laaja oppimäärä

Joonas Ruotsalainen GIT PIKAOPAS. Tutkielma 2011

Tutoriaaliläsnäoloista

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Ohjelmoinnin perusteet Y Python

Harjoitus 2 (viikko 45)

Luento 5. Timo Savola. 28. huhtikuuta 2006

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

Ohjelmoinnin perusteet Y Python

Java-kielen perusteet

Ohjelmoinnin perusteet, syksy 2006

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

Ohjelmoinnin peruskurssi Y1

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

Olio-ohjelmointi Javalla

TeleWell TW-LTE/4G/3G USB -modeemi Cat 4 150/50 Mbps

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

TIE Principles of Programming Languages. Seminaariesityksen essee. Ryhmä 18: Heidi Vulli, Joni Heikkilä

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

P e d a c o d e ohjelmointikoulutus verkossa

Ohjelmoinnin perusteet Y Python

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Ohjelmoinnin perusteet Y Python

5. HelloWorld-ohjelma 5.1

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Rajapinta (interface)

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

Ohjelmoinnin peruskurssi Y1

C++11 lambdat: [](){} Matti Rintala

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Transkriptio:

Python Uwe Geuder Tampereella 26. elokuuta 2010 http://creativecommons.org/licenses/by-sa/1.0/fi/

Sisältö Yleiskuvaus, historia Tyypit ja rakenteet Paljon esimerkkejä Laajennuksia ja työkaluja Yhteenveto Vaihteleva taso kaikille koodaajille kokeneille 2

Lyhyesti Python on multiparadigmakieli joka tukee struktuuraalista, funktionaalista ja oliopohjaista ohjelmointityyliä ja tarjoaa automaattista muistihallintoa. "There should be one and preferably only one obvious way to do it." Pitäisi olla yksi ja mieluiten vain yksi ilmeinen tapa tehdä se. 3

Historia Ensimmäinen kehittäjä ja BDFL: Guido van Rossum Joulukuu 1989: toteutus käynnistyy 20. helmikuuta 1991: ensimmäinen julkinen versio 16. lokakuuta 2000: versio 2.0 4. heinäkuuta 2010: versio 2.7 24. elokuuta 2010: version 2.6.6 3. joulukuuta 2008: versio 3.0 http://python history.blogspot.com/2009/01/brief timeline of python.html http://www.vimeo.com/1093745 4

Lisenssi Copyright Python Software Foundation (suurin osa) Avoin lähdekoodi Lisensoitu Python lisenssin alla Salliva lisenssi OSI hyväksytty GPL yhteensopiva 5

Käyttöalueet (IMHO) Kaikki mihin komentosarjakieltä käytetään Ohjelmoinnin tuottavuus tärkeämpi kuin viimeinen prosentti suorituskykyä Useimmiten ilman (omaa) graafista käyttöliittymää Esimerkkejä, videoita jne. http://www.python.org/about/apps/ http://www.python.org/about/success/ 6

Esimerkkejä käytöstä Ubuntun tasonnosto ym. hallintaohjelmat on siis aina Ubuntussa asennettuna Mercurial versiohallinta Zope sovelluspalvelin MoinMoin wiki Django ohjelmistokehys webohjelmoinnille Ohjelmointikoulutuksen ensimmäisen kieli 7

Toteutukset CPython Jython Yleisin Python käännetään automaattisesti tavukoodiksi, jota tavukooditulkki ajaa Unladen Swallow LLVM pohjainen, 5 kertaa nopeampi (???) [PEP3146] IronPython (.NET) (???)... 8

Alustat Linux (myös Maemo) Windows (CE:stä Windows 7:ään) MacOS S60 Noin 20 muuta... Python koodi on hyvin portattavissa, niin kauan kun ei käytetä käyttöjärjestelmäspesifisiä asioita 9

Hello world Yksinkertaisin versio Python 2.x print 'Hello world!' Python 3.x print( 'Hello world!' ) 10

Hello word (2) Muuten Älä kirjoita koodia moduulitasolle Ei uudelleenkäytettävissä Ei testattavissa def hw(): print Hello world! if name == ' main ' : hw() 11

Hello world (3), TDD (1/4) import unittest import StringIO import hw3 # testhw3.py class TestHelloWorld(unittest.TestCase): def testoutput(self): out = StringIO.StringIO() hw3.hw(out) self.assertequal( out.getvalue(), 'Hello world!\n' ) if name == ' main ': unittest.main() $ python testhw3.py Traceback (most recent call last): File "testhw3.py", line 3, in <module> import hw3 ImportError: No module named hw3 $ 12

Hello world (3), TDD (2/4) def hw(): pass # hw3.py if name == ' main ' : hw() $ python testhw3.py E ============================================================== ERROR: testhelloworld ( main.testhelloworld) Traceback (most recent call last): File "testhw3.py", line 9, in testoutput hw3.hw(out) TypeError: hw() takes no arguments (1 given) Ran 1 test in 0.003s FAILED (errors=1) $ 13

Hello world (3), TDD (3/4) import sys def hw( out ): Pass # hw3.py if name == ' main ' : hw( sys.stdout ) $ python testhw3.py F ============================================================== FAIL: testoutput ( main.testhelloworld) Traceback (most recent call last): File "testhw3.py", line 10, in testoutput self.assertequal( out.getvalue(), 'Hello world!\n' ) AssertionError: ''!= 'Hello world!\n' Ran 1 test in 0.001s FAILED (failures=1) 14

Hello world (3), TDD (4/4) import sys # hw3.py def hw( out ): print >> out, 'Hello world!' if name == ' main ' : hw(sys.stdout) $ python testhw3.py. Ran 1 test in 0.001s OK $ python hw3.py Hello world! $ 15

Syntaksi WYSIWYG: sisennyksellä on merkitystä Kaarisulkuja yms. ei käytetä if wings > 0: print lintu tai hyönteinen If weight > 50: Print Luultavasti lentokyvytön else: print Ei lintu Muuten ei mitään yllättävää, samakaltaista kuin C tai Java 16

Datatyypit Tyypitys (melko) vahvaa dynaamista >>> a = 3 >>> b = 7 >>> a + b 10 >>> b = 'foo' >>> a + b [...] TypeError: unsupported operand type(s) for +: 'int' and 'str' >>> b + a [ ] TypeError: cannot concatenate 'str' and 'int' objects >>> a= 'bar' >>> b + a 'foobar' >>> 17

Yksinkertaiset tyypit bool: True ja False int ja long long on rajaton Eroa ei tarvitse ottaa huomioon ohjelmoinnissa Mikään char tyyppi ei ole olemassa Osoittimia ei ole olemassa Muistihallinta pohjautuu automaattiseen roskakeruun 18

Muu tärkeä tyyppi Decimal Käyttää desimaalista aritmetiikkaa from decimal import Decimal # dec.py def test(a, b): if a * 3!= b : print "not", print "equal" $ python dec.py not equal equal test(0.1, 0.3) test(decimal('0.1'), Decimal('0.3')) 19

Säiliötyypit Säiliötyypit ovat tärkeä ydinosa Pythonista Mahdollistavat Python ohjelmoinnin tuottavuuden Säiliötyyppejä Sarjatyypit Luettelot (dict) Jos kirjoitat monimutkaista algoritmia välttääksesi Joukot (set) duplikaatteja, muista joukot 20

Tärkeimmät sarjatyypit Muutettavissa Lista Ei muutettavissa >>> a = [ 3, None, True, 'foo', ['bar', 7.5 ]] >>> del a[0] >>> a.append(5) >>> a [None, True, 'foo', ['bar', 7.5], 5] Merkkijono 'foobar' Tuple ( 'Matti Meikäläinen', 'Kotikatu 17', '12345 Jossain', 1970 ) 21

Toistorakenteet For silmukka on Pythonille tyypillisin Käyttää iteraattoria (iteraattori on mekanismi, jolla voidaan käydä läpi säiliön arvoja) >>> for i in [0, 1, 2]:... print i 0 1 2 >>> >>> for i in range(3):... print i 0 1 2 >>> range(3) [0, 1, 2] while niin kuin muissakin proseduraalisissa kielissä 22

Esimerkkejä for-silmukasta Luetaan tiedosto läpi f = open( 'foo.txt' ) for line in f : print line Käydään hakemistopuu läpi import os for (path, dirs, files) in os.walk( "." ) : for f in files: print os.path.join( path, f ) 23

Tulkin interaktiivinen käyttö Tulkki mahdollistaa nopeita kokeiluja >>> s = 'hello, world' >>> s.find( ',' ) 5 >>> s[7:] 'world' >>> dir() built in paljastaa olemassa olevat attribuutit >>> import imaplib >>> dir(imaplib) ['AllowedVersions', 'CRLF', 'Commands', 'Continuation', 'Debug', 'Flags' 'IMAP4_SSL', 'IMAP4_SSL_PORT', 'IMAP4_stream', 'Int2AP', 'InternalDate', 'Literal', 'MapCRLF', 'Mon2num', 'ParseFlags', 'Response_code', 'Time2In 'Untagged_response', 'Untagged_status', '_Authenticator', ' all ', ' ' file ', ' name ', ' package ', ' version ', 'binascii', 'rando 'subprocess', 'sys', 'time'] 24 >>>

Tulkin interaktiivinen käyttö Tulkin avulla voi nopeasti katso sisäänrakennettua dokumentaatiota >>> split. doc Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'split' is not defined >>> print "a".split. doc S.split([sep [,maxsplit]]) > list of strings Return a list of the words in the string S, using sep as the delimiter string. If maxsplit is given, at most maxsplit splits are done. If sep is not specified or is None, any whitespace string is a separator and empty strings are removed from the result. 25

Olio-ohjelmointi Esimerkki import os, sys, stat class myfile(): # rakentaja (muodostaja) def init (self,path,name) : self.path = path self.name = name def size(self) : fullpath = os.path.join( self.path,self.name ) return os.stat( fullpath )[stat.st_size] if name == ' main ' : f = myfile( sys.argv[1],sys.argv[2] ) print f.size() 26

Funktionaalinen ohjelmointi Esimerkkejä >>> def isvowel(x):... return x in 'aeiou'... >>> s = "The quick brown fox jumps over the lazy dog" >>> filter( isvowel, s ) 'euioouoeeao' >>> filter( lambda x: not isvowel(x), s) 'Th qck brwn fx jmps vr th lzy dg' >>> l = [ 1, 2, 3, 4, 5 ] >>> m = [ 0, 1, 0, 1, 0 ] >>> import operator >>> map( operator.add, m, l ) [1, 3, 3, 5, 5] 27

Poikkeukset Vastaavia kuin C++:ssa tai Javassa for i in [ 4, 0, 5 ] : try: print i, ":", float(4)/i, except ZeroDivisionError: print "jakolasku ei toiminut", except : print "kaikki pielessa", else : print "kaikki hyvin", finally: print "ja tehty" 4 : 1.0 kaikki hyvin ja tehty 0 : jakolasku ei toiminut ja tehty 5 : 0.8 kaikki hyvin ja tehty 28

Dynaamisia ominaisuuksia class mydynamic(): # dyn.py def init ( self, name, value ): exec "self." + name + " = " + str( value ) def getattr (self, name ): return "you asked for " + name Älä käytä Pythonia kun ohjaat lentokonetta tai ydinvoimalaa >>> a = dyn.mydynamic( "x", 1) >>> (a.x, a.y) (1, 'you asked for y') >>> >>> del a.x >>> a.y = "foo" >>> (a.x, a.y) ('you asked for x', 'foo') >>> dir(a) [' doc ', ' getattr ', ' init ', ' module ', 'y'] 29

Omia iteraattoreita (Huonona) esimerkkinä oma xrange() Säiliö ja iteraattori samassa luokassa class myxrange() : def init (self,n) : self.n = n self.nextn = 0 def iter (self): return self def next(self): if self.nextn < self.n : self.nextn += 1 return self.nextn 1 else: raise StopIteration for i in myxrange( 3 ) : for j in myxrange( 2 ) : print i, j $ python it.py 0 0 0 1 1 0 1 1 2 0 2 1 30

Omia generaattoreita Esimerkkinä oma xrange() def myxrange( limit ) : a = 0 while a < limit : yield a a += 1 for i in myxrange( 3 ) : for j in myxrange ( 2 ) : print i, j $ python gen.py 0 0 0 1 1 0 1 1 2 0 2 1 31

Pythonin kirjasto Pythonin kanssa tulee erittäin laaja kirjasto Esim. http://docs.python.org/library/ (40 kappaletta!) Persistenssi (pickle, dbm, sqlite3,...) Internet protokollat (http, ftp, smtp, imap,...) Pakkaus (zipfile, zlib, gzip, bzip2, ) Työkalut (getopt, curses, getpass,...) 32

Lisämoduulien asentaminen Perinteinen tapa Kehittäjä käyttää moduulia distutils Paketti jaetaan.tar tai.zip tiedostona Käyttäjä purkaa ja ajaa $ sudo python setup.py install Tai aluksi vain $ python setup.py build Dokumentaatio http://docs.python.org/install/index.html 33

Lisämoduulien asentaminen (ei enää ihan) uusi tapa Kehittäjä ja käyttäjä käyttävät moduulia setuptools http://peak.telecommunity.com/devcenter/setuptools Paketti jaetaan.egg tiedostona Käyttäjä käyttää easy_install komentoa (kuuluu pakettiin setuptools) sudo apt get install python setuptools sudo easy_install termcolor Dokumentaatio kertoo muista kutsumuodoista http://peak.telecommunity.com/devcenter/easyinstall 34

Python Package Index Virallinen pakettivarasto, PyPI 03.06.10: There are currently 10088 packages here. 26.08.10: There are currently 11075 packages here. easy_install osaa etsiä PyPI:stä 35

Lisämoduulien asentaminen Uusin tapa $ apt cache show python pip Description: Alternative Python package installer pip installs packages. Python packages. An easy_install replacement. pip is a replacement for easy_install, and is intended to be an improved package installer. (en ole vielä kokeillut) 36

Sovelluksen jakelu Linux Distutils jne. toimii alan ihmisille Tavallisille käyttäjille pitää tehdä.deb tai.rpm paketti Windows py2exe 37

M$ Python on myös hyvä valinta, jos syystä tai toisesta joutuu käyttämään ei vapaata alustaa Pythonin vakiokirjasto tukee yleisimpiä rajapintoja käyttöjärjestelmään esim. Tiedostojärjestelmä aliprosessit PyWin32 tukee suuren osan WIN32 API:sta Myös COM tuettuna 38

Vianetsintä Pdb on Pythonin sisäänrakennettu debugger Komentorivikäyttöliittymä Ei tue säikeitä Winpdb http://winpdb.org (nimi ei viittaa Windowsiin, toimii Linuxissakin) Graafinen käyttöliittymä Tukee säikeitä Muistaa pysähdyspisteet 39

Suorituskyky Pythonin suorituskyky on useimmiten tarpeeksi hyvää Jos tulee suorituskykyongelmia Mieti ensin tietorakenteet ja algoritmit Kokeile psyco (JIT kääntäjä x86:lle) Katso Cythonia Kirjoittaa laajennusmoduuli C:llä 40

Verkko-ohjelmointi Twisted Kehys johon saa erilaisia toteutuksia Http palvelin Pikaviestiklienttejä Pikaviestipalvelimia Sähköpostipalvelin... http://twistedmatrix.com/ 41

Kritiikki Tiedon piilottaminen (information hiding) ei ole mahdollinen Olio ohjelmointi on vain kevyesti tuettuna On olemassa funktioita (siis ei kaikki ole olio) Kieli ei ole ihan dogmaattisesti puhdasoppista, mutta käytännössä tarpeeksi hyvää 42

Tiedonlähteitä http://www.python.org http://code.activestate.com/recipes/langs/python/ 43

Kirjallisuus... Jussi Pekka Kasurinen: Python 3 ohjelmointi Ainoa (?) suomenkielinen, vain aloittelijoille Mark Pilgrim: Dive into Python http://diveintopython.org/ (GPL documentation) http://diveintopython3.org/ (cc by sa) Saa kääntää suomeksi... 44

Ajankohtaista Suomessa Suomenkielinen Python Interest Group Perustettu kesällä 2010 http://blog.mfabrik.com/2010/08/13/python interest grou PyCon konferenssi Turussa 21.10.10 ja 22.10.10 http://fi.pycon.org/ 45

Yhteenveto Python on ilmainen ja vapaa Pythonkoodi on portattavissa Python on helppo oppia Pythonilla on laaja kirjasto ja vielä enemmän lisäyksiä ovat saatavissa verkosta Pythonilla on nopea ja hauskaa koodata Graafiset käyttöliittymät eivät ole vahvin puoli 46