JĘZYK PYTHON NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Dr Marcin Lewandowski [ mlew@ippt.pan.pl ] Strona kursu: http://us4us.eu/wydarzenia/kursy/

Podobne dokumenty
Język Python (2) Język Python (2) 1/36

Python wstęp do programowania dla użytkowników WCSS

Informatyka w życiu matematyka

Podstawy programowania w Pythonie

Język Python. Język Python 1/35

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Python. Wprowadzenie. Jolanta Bachan

Kurs rozszerzony języka Python

Pisząc kod w Pythonie na pewno już nie raz coś poszło nie tak i Shell wypisał komunikat o błędzie podobny do poniższego:

Kurs rozszerzony języka Python

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Wyjątki. try - except

Zaawansowany kurs języka Python

Wstęp do programowania

Wstęp do programowania

Spis treści. Funkcje. 1 Funkcje 1.1 Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie 7

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ ]

Wstęp do Informatyki i Programowania (kierunek matematyka stosowana)

Przegląd języka Python. Łukasz Anwajler

Zaawansowany kurs języka Python

Programowanie obiektowe

Podstawy programowania w Pythonie

Środowisko programisty

Podstawy. Jan Koprowski Politechnika Gdańska, FTiMS Informatyka Stosowana

Microsoft IT Academy kurs programowania

Plan Przegląd podstawowych typów i konstrukcji języka

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Wstęp do Pythona. Janusz Szwabiński. Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.1/36

Algorytmy i struktury danych

Wstęp do programowania

Podstawy programowania skrót z wykładów:

Błyskawiczny kurs języka Python od podstaw do prostej strony opartej o microframework Flask.

rozdział 4: ZMIENNE I INSTRUKCJE

Programowanie RAD Delphi

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Programowanie obiektowe

Podstawy bioinformatyki 2017/18

Algorytmy i struktury danych

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Zmienne, stałe i operatory

Algorytmika i Programowanie VBA 1 - podstawy

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Pytania dla języka Python

Koło Studentów Informatyki Uniwersytetu Wrocławskiego

MATERIAŁY DO ZAJĘĆ II

Spis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4

Hackowanie zamrożonych binariów

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

2 Przygotował: mgr inż. Maciej Lasota

Należy ściągnąć oprogramowanie Apache na platformę

Programowanie i projektowanie obiektowe

KOTLIN. Język programowania dla Androida

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Programowanie obiektowe

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Technologie Informacyjne Mechatronika 2012/2013 Błędy obliczeń. Python.

Programowanie obiektowe

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Podstawy programowania. Python wykład 6

2. Składnia Pythona. Robert Janczewski. Gdańsk, 2014

Python. Skąd taka nazwa? Kurs systemu UNIX 1

Wstęp do informatyki. Python 1

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Wstęp do programowania. Różne różności

Python konsola tekstowa

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Język ludzki kod maszynowy

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Języki i metody programowania

LibreOffice Calc VBA

Elementy języka Scheme

Podstawy programowania w języku C

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

1 Podstawy c++ w pigułce.

Języki skryptowe w programie Plans

Programowanie obiektowe

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

Języki i metody programowania

Podstawy programowania w Pythonie

Podstawy programowania: Python. Wprowadzenie. Jolanta Bachan

1 Podstawy c++ w pigułce.

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Programowanie Obiektowe i C++

Delphi Laboratorium 3

Podstawy Programowania Podstawowa składnia języka C++

Instrukcje. Operatory. Operatory. Instrukcje sterujące. wyrażenie1 && wyrażenie2 ;

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Programista samouk : profesjonalny przewodnik do samodzielnej nauki kodowania / Cory Althoff. Gliwice, copyright Spis treści

Ćwiczenie 5. Python 3: Programowanie obiektowe i dziedziczenie

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Transkrypt:

JĘZYK PYTHON NARZĘDZIE DLA KAŻDEGO NAUKOWCA Dr Marcin Lewandowski [ mlew@ippt.pan.pl ] Strona kursu: http://us4us.eu/wydarzenia/kursy/ 1

2 PYTHON - WSTĘP

3 Języki kompilowane.c.o.exe Plik z kodem źródłowym KOMPILACJA Plik z kodem binarnym KONSOLIDACJA Plik wykonywalny

4 Interpreter Pythona.py.pyc Plik z kodem źródłowym KOMPILACJA - jednokrotna Plik z binarnym kodem pośrednim Program wykonywalny dla maszyny wirtualnej Uruchamianie na różnych systemach operacyjnych/maszynach wirtualnych

5 DRY KISS KISS Keep It Simple Stupid nie przesadzaj ze skomplikowanymi konstrukcjami prostota jest cnotą DRY Don t repeat yourself przemyśl architekturę całości i klocków z których ją zbudujesz pisz możliwie generyczne/uniwersalne funkcje

Zen of Python import this 6 >>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!

7 START Uruchomienie Python w trybie interaktywnym: > python Enthought Python Distribution -- www.enthought.com Version: 7.3-2 (32-bit) Python 2.7.3 EPD 7.3-2 (32-bit) (default, Apr 12 2012, 14:30:37) [MSC v.1500 32 bit (Intel)] on win32 Type "credits", "demo" or "enthought" for more information. >>> Ewaluacja wyrażenia: >>> 3*(7+2) 27 Wyjście z trybu interaktywnego Pythona: CTRL-Z CTRL-D # EOF on Windows # EOF on Unix

8 Uruchomienie skryptu Python Windows: > python skrypt.py > skrypt.py Linux: % python skrypt.py %./skrypt.py Wymaga dodania pierwszej linii: #!/usr/bin/env python Wymaga ustawienia atrybutu executable : % chmod u+x skrypt.py

9 Wykonanie/Ewaluacja poleceń/skryptu Wykonanie: s = a = 2*2; print a exec(s) Ewaluacja: s = 2*2 a = eval(s) print a Wykonanie skryptu z pliku: execfile( myscript.py )

10 Kod Python w module mymod.py: def fun1(): print 2*2 def fun2(): print 2+2 Załadowanie modułu i wykonanie funkcji: $ python >>> import mymod >>> mymod.fun1() >>> mymod.fun2()

11 Błędy Błędy składni (Syntax errors) czyli błędy gramatyczne i ortograficzne języka - Python wykona program tylko gdy tego typu błędów nie ma. Błędy składni są sygnalizowane na etapie kompilacji kodu źródłowego. PYTHON nie weryfikuje statycznie zgodności typów danych dlatego niezgodności typów będą powodowały błędy działania! Błędy działania (Runtime errors) Błędy które pojawiają się na etapie wykonywania programu. Obecnie w językach programowania tego typu błędy są nazywane Wyjątkami (Exceptions) i istnieje specjalny mechanizm ich obsługi Błędy semantyczne (Semantic errors) Program działa i nie zgłasza błędów, ale wynik jego działania jest niepoprawny to błąd semantyczny. Programista miał co innego na myśli niż faktycznie wykonuje program.

12 Debugging Debug Prints Umieszczanie w kodzie programu funkcji print do śledzenia jego stanu wewnętrznego w newralgicznych miejscach: a = 1 if _debug_: print a:, a b = a + 1 if _debug_: print b:, b Log Exceptions/Trace Debugger

13 IDLE

IDLE debugger 14 EX1

15 ELEMENTY JĘZYKA PYTHON

16 Słowa kluczowe assert, break, continue, del, except, exec, finally, import, is, pass, print, raise, return, try, yield and, as, in, or, not for, from, with if, else, elif, while class, def, global, lambda

17 Zarezerwowane _ jest używany w trybie interaktywnym do pamiętania rezultatu ostatniej ewaluacji ( koncepcja twórczo rozwinięta w IPython) _* nazwy lokalne (nie widoczne przy imporcie) * używany do nazw systemowych i niech tak zostanie (np.: builtins, doc, name ) * prywatne nazwy w klasach

18 Raczej zarezerwowane dir( builtins ) ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'None', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', ' debug ', ' doc ', ' import ', ' name ', ' package ', 'abs', 'all', 'any', 'apply', 'basestring', 'bin', 'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'cmp', 'coerce', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'intern', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'long', 'map', 'max', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', 'vars', 'xrange', 'zip ]

Przedefiniowanie nazw (tego bym raczej nie robił) Spróbuj: >>> len <built-in function len> >>> len('abc') 3 >>> len=2 >>> len 2 >>> len('abc') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'int' object is not callable >>> del len >>> len <built-in function len> >>> 19

20 Identyfikatory identifier ::= (letter "_") (letter digit "_")* letter ::= lowercase uppercase lowercase ::= "a"..."z" uppercase ::= "A"..."Z" digit ::= "0"..."9" WieLkOść LiTeR Ma znaczenie!!! W wersji 3.0+ UNICODE!

21 Linia kodu Linia tekstu zakończona znakiem nowej linii: LF (0x0A) Unix (Linux, MacOS, Solaris, ) CR LF (0x0D 0x0A) Windows Narzędzie do zamiany CRLF na LF <PYTHON>\Tools\scripts\crlf.py Wcięcia linii definiują bloki wykonawcze!!!

22 Kodowanie znaków (Charset/Encoding) Ustalenie kodowania dla pliku: # -*- coding: <encoding-name> -*- Latin-1 (ISO-8859-1) domyślny 7-bit/char Latin-2 (ISO-8859-2) polskie znaki UTF-8 BOM (byte-order mark)

23 Komentarze Znak # rozpoczyna komentarz traktowany do końca linii print 2*2 # oblicz 2*2 Oczywiście: print Tutaj to nie jest # komentarz # Komentarze dokumentacyjne: def fun(x): Ta funkcja zwraca 2*sin(x) return 2*sin(x)

24 Duck typing "If it looks like a duck and quacks like a duck, it must be a duck. def calc(a, b, c): return (a+b)*c print calc(1, 2, 3) print calc([1, 2, 3], [4, 5, 6], 2) print calc('apples ', 'and oranges, ', 3) --- 9 [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6] apples and oranges, apples and oranges, apples and oranges,

25 Typy proste None specjalny obiekt pusty: None==None is true None==False is false not(none) is true! Boolean typ logiczny: True False==False bool(42) not(42==true) (True or False) and not(false) True==1 not(1.000001==1) 1.00000000000000000000000009 == 1

26 Integer Stałopozycyjny 32-bitowy 32 int( 32 ) # int ze stringu 1/3 # sic! UWAGA!!! int(3.14) # trunc 0xABCD # heksadecymalnie 0o1234567 # ósemkowo 0b10010001 # binarnie

27 Long Stałopozycyjny dowolnie długi! 5L 12319809854761238913209182039812301 long(1) W Python 3.0+ usunięty/ujednolicony z Integer!

28 Float Zmiennopozycyjny 32-bitowy 4. 4.0 float(44) 1.0/3 complex(1+2j).real complex(1+2j).imag 4.25e3, 4.25E+3 + moduł decimal patrz dokumentacja Pythona

29 Zespolony Complex zespolony (2x Float): complex(1) complex(2j) complex( 3+j ) complex(1,2) 1+2j

30 Operatory numeryczne Operator Rezultat Uwagi x + y x - y x * y x / y x // y Suma x i y Różnica x i y Iloczyn x i y Dzielenie x przez y Dzielenie x przez y x % y Reszta z dzielenia x przez y Modulo -x zmiana znaku x +x Bez zmiany znaku x Dzielenie całkowitoliczbowe dla Int Dzielenie całkowitoliczbowe

31 Funkcje numeryczne Operator Rezultat Uwagi abs(x) Wartość bezwzględna/moduł x Moduł dla zespolonych int(x) long(x) float(x) complex(re,im) c.conjugate() Konwersja x do Integer Konwersja x do Long Konwersja x do Float Liczba zespolona: re + im*j Sprzężenie liczby zespolonej c divmod(x, y) Zwraca parę: (x // y, x % y) pow(x, y) x ** y x do potęgi y + moduł math patrz dokumentacja Pythona

32 Operatory bitowe Operator Rezultat Uwagi x y x ^ y x & y x << n x >> n x OR y x XOR y x AND y Przesunięcie x o n bitów w lewo Przesunięcie x o n bitów w prawo ~x Negacja bitów x n >= 0 n >= 0

33 Funkcje konwersji Integer/Long Funkcja bin(i) hex(i) int(o) long(o) int(s, base) long(s, base) oct(i) Opis Binarna reprezentacja liczby całkowitej i (string) bin(12) == 0b1100 Heksadecymalna reprezentacja liczby całkowitej i (string) hex(12) == 0xc Konwersja obiektu o do liczby Integer/Long (trunc dla o typu Float) Konwersja łańcucha s do liczby Integer/Long w zadanej bazie Ósemkowa reprezentacja liczby całkowitej i (string) oct(12) == 014

Łańcuchy znakowe 34 EX2 String łańcuchy znakowe: A string "Another string" "Escape \" quotation" He + llo +! *10 Cote d azure """Multiline string a newline""" T: %.02f P:%d % (20.567, 1024) + funkcje typu string patrz dokumentacja Pythona

35 Listy List lista: [1, 2, 3] [ word, 33, 123.998] [ w, o, r, d ] list("word") [[ list ], [ of, lists ]] list(( a, 1, 2)) Tuple lista niemodyfikowalna: (1, 2) ( a, 1) ( memento comma!,) tuple([ a, 1]) range(3) # [0, 1, 2] range(2, 4) # [2, 3] range(0, 5, 2) # [0, 2, 4]

36 Funkcje dla list i łańcuchów znakowych Listy (modyfikują a!): a = [5, 6, 7, 8] a.pop() # a = [5, 6, 7] a.append(2) # a = [5, 6, 7, 2] a.sort() # a = [2, 5, 6, 7] a.reverse() # a = [7, 6, 5, 2] Łańcuchy znakowe: a = Ala ma kota a.split() # [ Ala, ma, kota ] a.upper() # ALA MA KOTA a.title() # Ala Ma Kota import string string.join(a.split(), _ ) # Ala_ma_kota + więcej funkcji patrz dokumentacja Pythona

37 Indeksowanie sekwencji (1) Wyrażenie Wynik seq[i:j] Elementy seq w zakresie [i j) seq[i:] Elementy seq w zakresie [i końca] seq[:j] Elementy seq w zakresie [0 j) seq[:-1] seq[:] seq[i:j:k] Elementy seq w zakresie [0 końca-1] Wszystkie elementy seq (kopia) Elementy seq w zakresie [i j) z krokiem k (co k-ty)

38 Indeksowanie sekwencji (2) PYTHON Wynik MATLAB a = [5, 6, 7, 8] a = [5 6 7 8] a[0] 5 a(1) a[2:4] [7, 8] a(3:4) a[-1] 8 a(end) a[-2] 7 a(end-1) a[2:] [7, 8] a(3:end) a[::2] [5, 7] a(1:2:end) a[::-1] [8, 7, 6, 5] a(end:-1:1) len(a) 4 length(a) [min(a), max(a)] [5, 8] [min(a) max(a)] TAKŻE DLA: a = Python rulez [0:4] a = (5, 6, 7, 8) a = [{1: 2}, [3, 4], 5, Six ]

39 Słowniki Dictionary/Hash słownik: {}, dict() {1: one, 2: two, 5: five } { A :1, AB :2, ABC :1234} { NY : USA, WAW : Poland } dict(one=2, two=3) dict(zip(('one', 'two'), (2, 3))) dict([['two', 3], ['one', 2]])

40 Operatory/Funkcje dla kolekcji (1) Operacja s[i] = x s[i:j] = t Wynik Element i słownika s jest zamieniany na x Plaster s elementów [i j) jest zamieniany na elementy z t del s[i:j] To samo co s[i:j] = [] s[i:j:k] = t del s[i:j:k] Elementy s[i:j:k] zamieniane na elementy z t Usunięcie elementów s[i:j:k]

41 Operatory/Funkcje dla kolekcji (2) Operacja s.append(x) s.extend(x) s.count(x) s.index(x[, i[, j]]) s.insert(i, x) s.pop([i]) s.remove(x) s.reverse() s.sort([cmp[, key[, reverse]]]) Wynik To samo co s[len(s):len(s)] = [x] To samo co s[len(s):len(s)] = x Zwraca liczbę elementów spełniających warunek: s[i] == x Zwraca najmniejszy indeks k, taki że s[k] == x oraz i <= k < j To samo co s[i:i] = [x] To samo co x = s[i]; del s[i]; return x To samo co del s[s.index(x)] Odwraca kolejność elementów s (w miejscu) Sortuje elementy s (w miejscu)

42 Operatory/Funkcje dla kolekcji (3) Operacja x in coll x not in coll any(coll) all(coll) len(coll) max(coll[, key=function]) Wynik True jeśli coll zawiera x True jeśli coll zawiera x True jeśli którykolwiek element coll jest True True jeśli wszystkie elementy coll są True Liczba elementów coll Element maksymalny coll min(coll[, key=function]) Element minimalny coll

43 Zbiory set zbiór (nieuporządkowany) : set() set([1, 2]), set([2, 1]) set((2, 1)) set(range(0,5)) set([1, 2]) set([3, 4]) frozenset zbiór niemodyfikowalny + funkcje na zbiorach patrz dokumentacja Pythona

44 Jak skopiować kolekcję >>> a = [1, 2, 3] >>> b = a # kopia!? >>> a[1] = 2000 # zmiana w oryginale >>> b [1, 2000, 3] #!@%^

Kopia kolekcji 45 EX3 a = [1, 2, 3] b = a[:] # metoda 1 b = list(a) # metoda 2 b = []; b.extend(a) # metoda 3 b = []; # metoda 4 b = [ e for e in a ] for n in range(len(a)): # metoda 5 b.append(a[n]) + deepcopy patrz dokumentacja Pythona

46 range()/xrange() Pętla na sekwencji: for n in range(1000000000): print(n) MemoryError Rozwiązanie użyj xrange() for n in xrange(1000000000): print(n) W Python 3.0 xrange() nieistnieje, a range() zachowuje się jak xrange()!!! patrz iteratory

47 List comprehension (1) Tworzenie listy: all = [] for i in range(0, 100): all.append(i) j.w. w wersji jednolinijkowej: all = [ i for i in range(0, 100) ] list = [ expr for item in iterable ]

48 List comprehension (2) Tworzenie listy: odd = [] for i in range(0, 100): if i%2: odd.append(i) j.w. w wersji jednolinijkowej: odd = [ i for i in range(0, 100) if i%2] list = [ expr for item in iterable if cond]

49 Struktury kontrolne i pętle Instrukcje warunkowe If Pętle for while Inne import return yield pass assert

50 if if warunek1: blok1 elif warunek2: blok2 # Dodatkowe elif else: blok3

51 True or False False: None False Numeryczne zero: 0, 0L, 0.0, 0j Pusta sekwencja: '', (), [] Pusta słownik: {} Instancja klasy z funkcjami nonzero () lub len (), które zwracają 0 lub False Reszta True

52 Operatory porównań Operator Znaczenie Uwagi < Mniejszy niż <= Mniejszy lub równy > Większy niż >= Większy lub równy == Równy!= Nie równy <> is Identyczność obiektów is not Zaprzeczenie identyczności obiektów + Operatory logiczne: not, and, or

UWAGA na zwarcia! "short circuit" >>> 'a' == ('a' or 'b') True >>> 'b' == ('a' or 'b') False >>> 'a' == ('a' and 'b') False >>> 'b' == ('a' and 'b') True 53

54 For in range >>> od1do10 = range(1, 11) >>> for count in od1do10 : print count 1 2 9 10 >>> od1do10 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

55 for-continue, for-else for n in range(2, 10, 1): if n % 2: print n, is odd break else: print Odd not found

56 while, while-else input_ok = False while not input_ok: s = input('enter something: ') if s == 'exit': break if len(s) < 3: print('too small') continue input_ok = True else: print Input is OK

BMI (Body Mass Index) 57 EX4

58 BMI zakresy Zakres BMI Diagnoza < 16.5 Poważna niedowaga [16.5, 18.5) Niedowaga [18.5, 25) Prawidłowa [25, 30) Nadwaga [30, 35) Otyłość klasy I [35, 40) Otyłość klasy II > 40 Otyłość klasy III

59 Algorytm 1. Instrukcja dla użytkownika 2. Wprowadzenie danych: wagi i wzrostu 3. Sprawdzenie poprawności zakresów danych Waga 0-150kg Wzrost 0-200cm 4. Obliczenie BMI wg. wzoru 5. Klasyfikacja BMI wg. Tabeli 6. Powrót do punktu 1

60 Wersja I Korzystając z: Tylko typy proste Instrukcje: pętli, warunki Operacje numeryczne Komenda print, Funkcje: raw_input(), sys.exit()

61 Wersja II Modyfikacja Wersji I: Użyj listy do definicji klasyfikatora BMI

62 Funkcje def <name>(arg1, arg2,... argn): <statements> return <value> #optional n.p.: def sayhello(who): print 'Hello, who # End of function

63 Funkcje przykład def printmax(a, b): if a > b: print a, 'is maximum' elif a == b: print a, 'is equal to', b else: print b, 'is maximum' >>> printmax(3, 4) 4 is maximum >>> x = 5 >>> y = 7 >>> printmax(x, y) 7 is maximum

64 lambda lambda arg1, arg2,... argn :expression using arguments f = lambda x, y, z: x + y + z def func(x, y, z): return x + y + z

65 def/lambda/return/yeld def jest wykonywalny (!) i tworzy nowy obiekt pod nazwą funkcji lambda tworzy i zwraca nowy obiekt funkcji return zwraca rezultat do kodu wywołującego yield podobnie jak return zwraca rezultat, ale zapamiętuje stan wewn. funkcji i miejsce powrotu global deklaruje zmienne w funkcji jako globalne (domyślnie są lokalne) Argumenty do funkcji są przekazywane przez przypisanie (object reference) Argumenty, wartości zwracane i zmienne nie są deklarowane Python 3.0+: nonlocal odpowiednik global dla zakresu otaczającego

66 Reguły zakresu (scoping) Moduł to zakres global. Zmienne zdefiniowane na poziomie modułu są dostępne z innych modułów za pomocą prefiksu nazwy modułu. Zakres global obejmuje tylko jeden plik!!! Można zaimportować wszystkie nazwy z modułu do przestrzeni globalnej modułu importując jego zawartość. Każde wywołanie funkcji tworzy nowy zakres lokalny (dla tej funkcji). Zmienne utworzone/przypisane w funkcji są lokalne, chyba, że zostały zadeklarowane jako global Wszystkie inne nazwy są wyszukiwane w zakresie: otaczającym (enclosing scope), globalnym, wbudowanym ( builtin ).

67 Reguła przeszukiwania LEGB

68 Przykłady X = 88 # global X def func(): X = 99 # local X func() print(x) # 88 ---------------------------------- # Global scope X = 99 def func(y): # Local scope Z = X + Y # X is a global return Z func(1) # 100

69 Argumenty funkcji Argumenty typów niemodyfikowalnych (Immutable) efektywnie są przekazywane przez wartość (np. integer, string). Argumenty typów modyfikowalnych efektywnie są przekazywane przez referencję (np. listy, słowniki).

70 Składnia argumentów funkcji Składnia Strona Interpretacja func(value) Wywołanie argument normalny pozycyjny func(name=value) Wywołanie argument nazwany func(*sequence) Wywołanie przekazuje elementy sekwencji jako kolejne argumenty pozycyjne func(**dict) Wywołanie przekazuje elementy słownika (klucz/wartość) jako kolejne argumenty nazwane def func(name) Funkcja Argument normalny: dopasowanie po pozycji lub nazwie def func(name=value) Funkcja Argument domyślny, o ile nie przekazany w wywołaniu def func(*name) Funkcja Zbiera pozostałe argumenty pozycyjne w listę def func(**name) Funkcja Zbiera pozostałe argumenty nazwane w słownik

71 Argumenty pozycyjne/nazwane/domyślne def func(spam, eggs, toast=0, ham=0): print((spam, eggs, toast, ham)) > func(1, 2) (1, 2, 0, 0) > func(1, ham=1, eggs=0) (1, 0, 0, 1) > func(spam=1, eggs=0) (1, 0, 0, 0) > func(toast=1, eggs=2, spam=3) (3, 2, 1, 0) > func(1, 2, 3, 4) (1, 2, 3, 4)

72 Argumenty typu * i ** >>> def f(*args): print(args)... > f() () > f(1) (1,) > f(1, 2, 3, 4) (1, 2, 3, 4) ----------------- > def f(**args): print(args)... > f() {} > f(a=1, b=2) {'a': 1, 'b': 2}

73 Funkcje dobra praktyka Funkcja powinna służyć do realizacji jednej dobrze określonej rzeczy i nie być zbyt rozbudowana Używaj argumentów na wejściu i return na wyjściu funkcji Zmiennych global używaj tylko w kiedy to absolutnie konieczne Nie modyfikuj argumentów przekazywanych przez referencję o ile wywołujący się tego nie spodziewa Nie modyfikuj zmiennych w innych modułach

74 Wyjątki try: blok-try except ErrorClass1: blok-except1 except ErrorClass2: blok-except2 except else: blok-else finally: blok-finally

75 Wyjątki - przykład try: a = 1/0 except: print 'except' else: print 'ok' finally: print 'finally'

76 Generacja wyjątku # Generacja instancji wyjątku raise <instance> # Utworzenie instancji i generacja wyjątku raise <class> # Powtórna generacja ostatniego wyjątku raise -------------------- try: raise IndexError except IndexError: print 'got exception

77 Składnia try/except/else/finally Składnia except: except name: except name as value: except (name1, name2): except (name1, name2) as value: else: finally: Interpretacja Łapie wyjątki wszystkich typów Łapie tylko wyjątki danego typu Łapie wyjątki danego typu oraz jego instancję Łapie wyjątki danych typów Łapie wyjątki danych typów oraz ich instancję Wykonywane gdy żaden wyjątek nie został zgłoszony Wykonywane ZAWSZE na końcu bloku except

with/as 78 EX5 with expression [as variable]: with-block with open(r'c:\data') as file: for line in file: print(line) + Context Management Protocol patrz dokumentacja Pythona

79 MODUŁY

80 Moduły po co i jak MODUŁ = biblioteka Pythona PAKIET (Package) = zestaw modułów w drzewie katalogów Po co: Code reuse! Dzielenie kodu/przestrzeni nazw Współdzielenie serwisów/funkcji/danych Kroki ładowania modułu: 1. Znalezienie pliku modułu (ścieżka przeszukiwania) 2. Kompilacja modułu do byte-code (o ile konieczne) 3. Wykonanie modułu

81 import import <module1>, <module2> from <module> import <name1>, <name2> from <module> import *

82 sys.path Poszukiwanie pliku modułu: 1. Katalog domowy/bieżący (UWAGA na nazwy!) 2. Zmienna systemowa PYTHONPATH 3. Katalog biblioteki standardowej 4. Zawartość plików.pth Powyższe tworzy ścieżkę przeszukiwania pamiętaną w sys.path

83 Typy modułów import mod Plik źródłowy Python modułu: mod.py Skompilowany byte-code modułu: mod.pyc Katalog o nazwie mod dla importu pakietów Skompilowany moduł natywny biblioteka dynamiczna systemu operacyjnego (np. mod.dll/mod.pyd dla Windows, mod.so dla Linux) Moduł wbudowany w interpreter Pythona (skompilowany i statycznie zlinkowany) Plik ZIP zostaje automatycznie rozpakowany w locie Obraz modułu w pamięci dla zamrożonych programów wykonawczych

84 Przykład >>> sin(2.0) NameError: name 'sin' is not defined >>> import math >>> dir(math) # look what is in the math [' doc ', ' name ', ' package ', 'acos', 'acosh', 'asin', >>> math.sin(math.pi/2) 1.0 >>> from math import sin >>> sin(math.pi/2) 1.0

85 Ładowanie modułów c.d. Przemianowanie podczas ładowania: from math import sin as mysin Możliwość przeładowania modułu: reload(mymodule)

86 Przekrywanie nazw przy imporcie from M import func from N import func # ooops func() # wywoła N.func! ------------------------------------------ import M, N M.func() N.func() # ładuje całe moduły # wołamy M.func() # wołamy N.func()

87 Nieśmiałe ładowanie try: import urllib3 as urllib # 1st try except: try: import urllib2 as urllib # 2nd try except: import urllib as urllib # urllib.urlopen( http://neuro.imm.dtu.dk/ )

88 Dokumentacja modułów/funkcji """A module ble, ble, ble...""" def fun_add(x, y=1): """ fun_add(x,y=1) takes one or two numerical arguments and adds them together. If the second argumentn is empty it increments input by 1 """ return x + y print myfunction. doc >>> help(myfunction) Generacja dokumentacji HTML dla modułu $ pydoc -w./mymodule.py

89 Uruchamianie modułu jako skryptu Przydatne np. do testowania modułów Moduł uruchomiony jako skrypt if name == ' main ': print Just self testing test1()