Komunikacja Cz owiek-Komputer - Wprowadzenie do Python'a · PDF...
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ę.