Komunikacja Cz owiek-Komputer - Wprowadzenie do Python'a · PDF...

Post on 14-Mar-2018

218 views 2 download

Transcript of Komunikacja Cz owiek-Komputer - Wprowadzenie do Python'a · PDF...

Wstęp Tutorial Moduły i wydajność

Komunikacja Człowiek-KomputerWprowadzenie do Python’a

Wojciech Jaśkowski

Instytut InformatykiPolitechnika Poznańska

Wersja: 14 października 2013

Wstęp Tutorial Moduły i wydajność

Hello world

print(’Hello world’)

Wstęp Tutorial Moduły i wydajność

Dlaczego Python?

Prosty do naukiZwięzła składniaCzytelny kodPrzenośny: Windows, Linux/Unix, OSX, Java, .NETOtwarty, wolny, darmowyBogata biblioteka standardowa, ogromna liczba bibliotekPopularny wśród naukowców“Łatwo googlywalny”Stosunkowo popularny: 8 na liście TIOBE ProgrammingCommunity Index

Wstęp Tutorial Moduły i wydajność

TIOBE Programming Community Index

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Wstęp Tutorial Moduły i wydajność

Kto używa?

Dropbox (Guido van Rossum)MercurialUbuntu Software CenterTrac — web-based bug/issue tracking database, wiki, andversion control front-endCivilization IV, World of Tanks — for most of its tasksBattlefield 2 — for all its addonsDjango, an MVT (model, view, template) web frameworkAbaqus, Finite Element Software (scripting)Blender 3D, Unity 3D, Cinema 4D, Maya, Corel Paint ShopPro, GIMP (scripting)Google (e.g. Youtube, Google App, Google Chrome, partially)Engine Quora, Instagram, Spotify, Reddit

Wstęp Tutorial Moduły i wydajność

Implementacje

CPython (standard)Najnowsze stabilne wersje: 2.7 i 3.3

PyPy (w Pythonie, JIT)Jython (dla JVM)IronPython (dla .NET)

Wstęp Tutorial Moduły i wydajność

Paradygmaty

Proceduralny

arr = sorted([3,2,-1])first = arr[0]

Obiektowy

class Pair(list):def __init__(self, first, second):

self.first = firstself.second = second

arr = Pair(3, 7)

Elementy funkcyjne

arr = sorted([3,2,-1], key=lambda x: abs(x))

Wstęp Tutorial Moduły i wydajność

Cechy Python’a

System typów:bez deklaracji

x = 1

dynamicznie typowany

x = 1x = "12"

silnie typowany

x = "1" + 1TypeError: Can’t convert ’int’ object to str implicitly

Wstęp Tutorial Moduły i wydajność

Składnia

“Life’s better without braces” (Bruce Eckel)dwukropek, spacje (tabulatory), cudzysłowy

if␣1+1==2:␣␣print(’Uff!’)else:␣␣print("Ups.␣I␣should’ve␣tried␣that")

komentarze

# This should not happen... normally""" An uglytwo-line comment """

Wstęp Tutorial Moduły i wydajność

→ Tutorial

Wstęp Tutorial Moduły i wydajność

Uruchamianie i środowiska interaktywne

$> python plik.py

$> python

$> ipython

$> ipython plik.ipy

$> ipython qtconsole

$> ipython qtconsole --matplotlib

$> ipython notebook

$> ipython notebook --matplotlib=inline

Wstęp Tutorial Moduły i wydajność

Środowiska developerskie warte uwagi

PyCharm (http://www.jetbrains.com/pycharm/)pyscripter (https://code.google.com/p/pyscripter/)spyder (https://code.google.com/p/spyderlib/)

Wstęp Tutorial Moduły i wydajność

Moduły

Moduł to plik, np:

fibonacci.pyfrom __future__ import print_function # Python < 3.0MAXFIB=1000def fib(n):

a, b = 0, 1while b < n:

print(b,end=’’)a, b = b, a+b

>>> import fibonacci>>> fibonacci.fib(10)1 1 2 3 5 8

Wstęp Tutorial Moduły i wydajność

Moduły

Moduł to plik, np:

fibonacci.pyfrom __future__ import print_function # Python < 3.0MAXFIB=1000def fib(n):

a, b = 0, 1while b < n:

print(b,end=’’)a, b = b, a+b

>>> import fibonacci as fibo>>> fibo.fib(10)1 1 2 3 5 8

Wstęp Tutorial Moduły i wydajność

Moduły

Moduł to plik, np:

fibonacci.pyfrom __future__ import print_function # Python < 3.0MAXFIB=1000def fib(n):

a, b = 0, 1while b < n:

print(b,end=’’)a, b = b, a+b

>>> from fibonacci import fib>>> fib(10)1 1 2 3 5 8

Wstęp Tutorial Moduły i wydajność

Moduły

Moduł to plik, np:

fibonacci.pyfrom __future__ import print_function # Python < 3.0MAXFIB=1000def fib(n):

a, b = 0, 1while b < n:

print(b,end=’’)a, b = b, a+b

>>> from fibonacci import fib, MAXFIB>>> fib(10)1 1 2 3 5 8>>> MAXFIB1000

Wstęp Tutorial Moduły i wydajność

Moduły

Moduł to plik, np:

fibonacci.pyfrom __future__ import print_function # Python < 3.0MAXFIB=1000def fib(n):

a, b = 0, 1while b < n:

print(b,end=’’)a, b = b, a+b

>>> from fibonacci import * # Niepolecane>>> fib(10)1 1 2 3 5 8>>> MAXFIB1000

Wstęp Tutorial Moduły i wydajność

Skrypty

>>> import fibonacci as fib>>> fib.__name__’fibonacci’

Uruchamianie skryptów:

python fibonacci.py <argumenty>

ustawia__name__ na ’__main__’

Wstęp Tutorial Moduły i wydajność

Skrypty

fibonacci.pyfrom __future__ import print_functiondef fib(n):

a, b = 0, 1while b < n:

print(b, end=’’)a, b = b, a+b

if __name__ == ’__main__’:import sysfib(int(sys.argv[1]))

> python fibbonacci.py 201 1 2 3 5 8 13

Wstęp Tutorial Moduły i wydajność

Pakiety

sound/ Pakiet__init__.py Inicjalizacja pakietuformats/ Podpakiet ’formats’

__init__.pywavread.pywavwrite.pyaiffread.pyaiffwrite.pyauread.pyauwrite.py...

effects/ Podpakiet ’efekty’__init__.pyecho.pysurround.py

Wstęp Tutorial Moduły i wydajność

Pakiety

Moduły i pakiety muszą być w katalogusys.path

>>> import sys>>> sys.path[’’,’/usr/lib/python2.7/dist-packages’,’/home/wojciech/.local/lib/python2.7/site-packages’,(...)]

Wstęp Tutorial Moduły i wydajność

Pakiety — instalacja

Ubuntu:

sudo apt-get install python-numpy

Windows:http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

Wszędzie z repozytorium PyPI:

> pip install numpy> easy_install numpy

Lokalnie, w katalogu użytkownika:

> pip install --user numpy> easy_install --user numpy

Wstęp Tutorial Moduły i wydajność

Pomoc

>>> help(abs)Help on built-in function abs in module __builtin__:

abs(...)abs(number) -> number

Return the absolute value of the argument.

>>> abs.__doc__’abs(number) -> number\n\nReturn the absolute value ofthe argument.’

>>> dir(list)[’__add__’, ..., ’sort’, ...]

Wstęp Tutorial Moduły i wydajność

Python jest wolny. Ale czy zbyt wolny?

Źródło: http://www.infoworld.com/d/application-development/van-rossum-python-not-too-slow-188715

Wstęp Tutorial Moduły i wydajność

Przyspieszanie

PyPy, kompilator z JITRozszerzenia w C lub C++: http://docs.python.org/release/2.5.2/ext/intro.html

Cython, Python z typami z C

Wstęp Tutorial Moduły i wydajność

Cython

def primes(int kmax):cdef int n, k, icdef int p[1000]result = []k = 0; n = 2while k < kmax:

i = 0while i < k and n % p[i] != 0:

i += 1if i == k:

p[k] = nk += 1result.append(n)

n = n + 1return result

Wstęp Tutorial Moduły i wydajność

Koniec

Dziękuję za uwagę.