A Python programozási nyelv Takács Gábor <gtakacs@sze.hu> Széchenyi István Egyetem Matematika és Számítástudomány Tanszék 1 / 47
Jellemzők + értelmezett nyelv + típusai dinamikusak + szintaxisa tömör, elegáns + többparadigmás nyelv + könnyen tanulható ("brain-friendly") + több 10 ezer külső modul érhető el hozzá (https://pypi.python.org/pypi) + erős közösség áll mögötte + szabadon használható + platformfüggetlen bizonyos feladatokhoz lassú lehet többszálú lehetőségei korlátozottak 2 / 47
Guido van Rossum (BDFL) 3 / 47
Mérföldkövek 1994 Python 1.0 2000 Python 2.0 2001 Python Software Foundation (http://www.python.org/psf/) 2008 Python 3.0 4 / 47
Python 2 vagy Python 3? 5 / 47
Python Enhancement Proposal (PEP) 6 / 47
Prominens alkalmazások Youtube Python has been an important part of Google since the beginning, and remains so as the system grows and evolve (Peter Norvig, Google) Dropbox Python became my favorite programming language because it had a balance of simplicity, flexibility, and elegance. (Drew Houston, CEO, Dropbox) 7 / 47
Implementációk CPython (http://python.org/), v3.4.2 / v2.7.9 PyPy (http://pypy.org/), v3.2.5 / v2.7.8 Jython (http://www.jython.org/), v2.7b3 IronPython (http://ironpython.net/), v2.7.5... 8 / 47
Telepítés Linux - értelmező telepítése: triviális - külső modulok telepítése: pip-pel Windows - 1. lehetőség: telepítőcsomagokkal telepítés - 2. lehetőség: Linux-szerű környezet beállítása - 3. lehetőség: Python disztibúció használata - Anaconda (https://store.continuum.io/cshop/anaconda/) - WinPython (http://winpython.sourceforge.net/) - Enthought (https://www.enthought.com/products/epd/) 9 / 47
Fejlesztőkörnyezetek nehézsúlyú - PyCharm (http://www.jetbrains.com/pycharm/) - Eclipse + PyDev plugin - Spyder (https://code.google.com/p/spyderlib/) - Wing IDE (http://www.wingware.com/), $245 - Komodo (http://www.activestate.com/komodo-ide), $295 könnyűsúlyú - Emacs / Vim /... - Sublime Text (http://www.sublimetext.com/), $70 10 / 47
11 / 47
Az értelmező python file [arg]... python -c command [arg]... ipython ipython console qtconsole notebook #!/usr/bin/env python print('hello, World!') 12 / 47
Adattípusok / 1 None True, False számok i = 10 # egész szám (int) f = 3.14 # lebegőpontos szám (float) c = 2-5j # komplex szám (complex) sztringek s1 = 'alma' # a határoló jel lehet ' s2 = "szilva" #...és " is s3 = '"alma" "szilva"' # <= ilyenkor nem kell levédeni # a sztringben a " karaktert! # többsoros sztringállandó s4 = """alma szilva""" 13 / 47
Adattípusok / 2 Aritmetikai műveletek: +, -, *, /, **, %, //. Összehasonlítás: <, <=, ==,!=, >, >=. Logikai műveletek: and, or, not. Bitenkénti logikai műveletek: &,, ˆ,, «,». Halmazműveletek: &,, -. Tartalmazásvizsgálat: in, not in. Azonosságvizsgálat: is, is not. Értékadás: =, +=, -=, *=, /=, **=, %=, //=,... 14 / 47
Adattípusok / 3 szekvencia típusok t = (1, 2, 3) # tuple l = [1, 2, 3] # lista halmazok, szótárak s = set([1, 2, 3]) # halmaz (Python 2) s = {1, 2, 3} # halmaz (Python 3) d = {'x': 1, 'y': 2, 'z': 3} # szótár d['x'] # az 'x' kulcshoz rendelt érték lekérdezése d['x'] = 9 # az 'x' kulcshoz érték módosítása d['w'] = 0 # új kulcs-érték pár hozzáadása 1 in s # eleme 1 az s halmaznak? 'x' in d # van a d szótárban 'x' kulcs? 15 / 47
Adattípusok / 4 konverzió int(2.3) # float => int float('10') # str => float str(20) # int => str tuple([1, 2, 3]) # list => tuple list((4, 5, 6)) # tuple => list set((7, 8, 9)) # tuple => set dict([('a', 1), ('b', 2)]) # pairs => dict {'a': 1, 'b': 2}.items() # dict => pairs 16 / 47
Vezérlési szerkezetek if 2 * 2 == 4: # Pythonban a vezérlési szerezetek print('alma') # belseje indentálással különül el. elif 2 * 2 == 5: # a kód többi részétől. print('szilva') else: # Emiatt garantált, hogy a program print('barack') # vizuális megjelenése és logikai # jelentése összhangban van. # végtelen ciklus while True: pass # Ha csak 1 végrehajtandó utasítás van, # akkor írhatjuk a while-lal 1 sorba. # a 0-tól 9-ig terjedő egész számok négyzetének kiírása for i in range(10): print(i**2) range vs. xrange break, continue 17 / 47
Szabványos be- és kimenet # Python 2 print 'hello' sys.stdout.write('hello') sys.stdout.write('hello'); sys.stdout.flush() # Python 3 print('hello') print('hello', end='') print('hello', flush=true) # Python 2 x = input('kérek egy egész számot: ') # VESZÉLYES! x = int(raw_input('kérek egy egész számot: ')) # Python 3 x = int(input('kérek egy egész számot: ')) 18 / 47
Gyakorlás: Számkitalálós játék > Találd ki, hogy melyik számra gondoltam 1 és 100 között! > 50 > Kisebb számra gondoltam. > 25 > Nagyobb számra gondoltam. >... 19 / 47