język python ‑ narzędzie dla każdego...
TRANSCRIPT
![Page 1: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/1.jpg)
JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA
Marcin Lewandowski
![Page 2: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/2.jpg)
PYTHON - WSTĘP
2
![Page 3: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/3.jpg)
Języki kompilowane
.c
• Plik z kodem źródłowym
• KOMPILACJA
.o
• Plik z kodem binarnym
• KONSOLIDACJA
.exe
• Plik wykonywalny
3
![Page 4: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/4.jpg)
Interpreter Pythona
.py
• Plik z kodem źródłowym
• KOMPILACJA - jednokrotna
.pyc
• Plik z binarnym kodem pośrednim
• Program wykonywalny dla maszyny wirtualnej
• Uruchamianie na różnych systemach operacyjnych/maszynach wirtualnych
4
![Page 5: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/5.jpg)
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
5
![Page 6: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/6.jpg)
Zen of Python import this
>>> 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!
6
![Page 7: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/7.jpg)
*** Lektura rozszerzająca ***
• Steve McConnell, Code Complete: A Practical Handbook of Software Construction, 2 wydanie, Microsoft Press, 2004
• Michael L. Scott, Programming Language Pragmatics, Morgan Kaufmann; 3 edition, 2009
• Eric S. Raymond, The Art of UNIX Programming, Addison-Wesley Professional, 2003
7
![Page 8: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/8.jpg)
START
• Uruchomienie Python w trybie interaktywnym: > python
ActivePython 2.6.4.10 (ActiveState Software Inc.) based on
Python 2.6.4 (r264:75706, Jan 22 2010, 16:41:54) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
• Ewaluacja wyrażenia: >>> 3*(7+2)
27
• Wyjście z trybu interaktywnego Pythona: CTRL-Z # EOF on Windows CTRL-D # EOF on Unix
8
![Page 9: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/9.jpg)
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
![Page 10: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/10.jpg)
Wykonanie/Ewaluacja poleceo/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
![Page 11: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/11.jpg)
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
![Page 12: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/12.jpg)
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
![Page 13: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/13.jpg)
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
![Page 14: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/14.jpg)
IDLE
14
![Page 15: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/15.jpg)
IDLE debugger EX1
15
![Page 16: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/16.jpg)
ELEMENTY JĘZYKA PYTHON
16
![Page 17: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/17.jpg)
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
![Page 18: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/18.jpg)
Zarezerwowane
• _
jest używany w trybie interaktywnym do pamiętania rezultatu ostatniej ewaluacji (bywa używany do I18N, moduł gettext)
• _* nazwy lokalne (nie widoczne przy imporcie)
• __*__ używany do nazw systemowych i niech tak zostanie (np.: __builtins__, __doc__, __name__)
• __* prywatne nazwy w klasach
18
![Page 19: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/19.jpg)
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‘+
19
![Page 20: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/20.jpg)
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>
>>>
20
![Page 21: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/21.jpg)
Identyfikatory
• identifier ::= (letter|"_") (letter | digit | "_")*
• letter ::= lowercase | uppercase
• lowercase ::= "a"..."z"
• uppercase ::= "A"..."Z"
• digit ::= "0"..."9"
• WieLkOśd LiTeR Ma zNaczEnie!!!
• 3.0+ UNICODE!
21
![Page 22: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/22.jpg)
Linia kodu
• Linia tekstu zakooczona 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
![Page 23: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/23.jpg)
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
![Page 24: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/24.jpg)
Komentarze
• Znak # rozpoczyna komentarz – traktowany do kooca linii
print 2*2 # oblicz 2*2
• Oczywiście: print ‘Tutaj to nie jest # komentarz #’
24
![Page 25: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/25.jpg)
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
![Page 26: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/26.jpg)
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
![Page 27: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/27.jpg)
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
![Page 28: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/28.jpg)
Long
• Stałopozycyjny – dowolnie długi!
5L
12319809854761238913209182039812301
long(1)
• W Python 3.0+ usunięty/ujednolicony z Integer!
28
![Page 29: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/29.jpg)
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
![Page 30: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/30.jpg)
Zespolony
• Complex – zespolony (2x Float): complex(1)
complex(2j)
complex(’3+j’)
complex(1,2)
1+2j
30
![Page 31: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/31.jpg)
Operatory numeryczne
Operator Rezultat Uwagi
x + y Suma x i y
x - y Różnica x i y
x * y Iloczyn x i y
x / y Dzielenie x przez y Dzielenie całkowitoliczbowe dla Int
x // y Dzielenie x przez y Dzielenie całkowitoliczbowe
x % y Reszta z dzielenia x przez y Modulo
-x zmiana znaku x
+x Bez zmiany znaku x
31
![Page 32: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/32.jpg)
Funkcje numeryczne
Operator Rezultat Uwagi
abs(x) Wartośd bezwzględna/moduł x Moduł dla zespolonych
int(x) Konwersja x do Integer
long(x) Konwersja x do Long
float(x) Konwersja x do Float
complex(re,im) Liczba zespolona: re + im*j
c.conjugate() 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
![Page 33: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/33.jpg)
Operatory bitowe
Operator Rezultat Uwagi
x | y x OR y
x ^ y x XOR y
x & y x AND y
x << n Przesunięcie x o n bitów w lewo
n >= 0
x >> n Przesunięcie x o n bitów w prawo
n >= 0
~x Negacja bitów x
33
![Page 34: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/34.jpg)
Funkcje konwersji Integer/Long
Funkcja Opis
bin(i) Binarna reprezentacja liczby całkowitej i (string) bin(12) == ‘0b1100’
hex(i) Heksadecymalna reprezentacja liczby całkowitej i (string) hex(12) == ‘0xc’
int(o) long(o)
Konwersja obiektu o do liczby Integer/Long (trunc dla o typu Float)
int(s, base) long(s, base)
Konwersja łaocucha s do liczby Integer/Long w zadanej bazie
oct(i) Ósemkowa reprezentacja liczby całkowitej i (string) oct(12) == ‘014’
34
![Page 35: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/35.jpg)
Łaocuchy znakowe
• String – łaocuchy 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
EX2
35
![Page 36: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/36.jpg)
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
![Page 37: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/37.jpg)
Funkcje dla list i łaocuchó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]
• Łaocuchy 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
![Page 38: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/38.jpg)
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] Elementy seq w zakresie [0 … końca-1]
seq[:] Wszystkie elementy seq (kopia)
seq[i:j:k] Elementy seq w zakresie [i … j) z krokiem k (co k-ty)
38
![Page 39: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/39.jpg)
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
![Page 40: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/40.jpg)
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
![Page 41: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/41.jpg)
Operatory/Funkcje dla kolekcji (1) Operacja Wynik
s[i] = x Element i słownika s jest zamieniany na x
s[i:j] = t ‘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 Elementy s[i:j:k] zamieniane na elementy z t
del s[i:j:k] Usunięcie elementów s[i:j:k]
41
![Page 42: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/42.jpg)
Operatory/Funkcje dla kolekcji (2) Operacja Wynik
s.append(x) To samo co s[len(s):len(s)] = [x]
s.extend(x) To samo co s[len(s):len(s)] = x
s.count(x) Zwraca liczbę elementów spełniających warunek: s[i] == x
s.index(x[, i[, j]]) Zwraca najmniejszy indeks k, taki że s[k] == x oraz i <= k < j
s.insert(i, x) To samo co s[i:i] = [x]
s.pop([i]) To samo co x = s[i]; del s[i]; return x
s.remove(x) To samo co del s[s.index(x)]
s.reverse() Odwraca kolejnośd elementów s (w miejscu)
s.sort([cmp[, key[, reverse]]])
Sortuje elementy s (w miejscu)
42
![Page 43: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/43.jpg)
Operatory/Funkcje dla kolekcji (3) Operacja Wynik
x in coll True jeśli coll zawiera x
x not in coll True jeśli coll zawiera x
any(coll) True jeśli którykolwiek element coll jest True
all(coll) True jeśli wszystkie elementy coll są True
len(coll) Liczba elementów coll
max(coll[, key=function]) Element maksymalny coll
min(coll[, key=function]) Element minimalny coll
43
![Page 44: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/44.jpg)
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
![Page 45: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/45.jpg)
Jak skopiowad kolekcję
>>> a = [1, 2, 3]
>>> b = a # kopia !?
>>> a[1] = 2000 # zmiana w oryginale
>>> b
[1, 2000, 3] # !@%^
45
![Page 46: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/46.jpg)
Kopia kolekcji
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
EX3
46
![Page 47: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/47.jpg)
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()!!!
47
![Page 48: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/48.jpg)
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
![Page 49: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/49.jpg)
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
![Page 50: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/50.jpg)
Struktury kontrolne i pętle
• Instrukcje warunkowe – If
• Pętle – for – while
• Inne – import – return – yield – pass – assert
50
![Page 51: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/51.jpg)
if
if warunek1:
blok1
elif warunek2:
blok2
# … Dodatkowe elif …
else:
blok3
51
![Page 52: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/52.jpg)
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
![Page 53: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/53.jpg)
Operatory porównao
Operator Znaczenie Uwagi
< Mniejszy niż
<= Mniejszy lub równy
> Większy niż
>= Większy lub równy
== Równy
!= Nie równy <>
is Identycznośd obiektów
is not Zaprzeczenie identyczności obiektów
+ Operatory logiczne: not, and, or, 53
![Page 54: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/54.jpg)
UWAGA na zwarcie! "short circuit"
>>> 'a' == ('a' or 'b')
True
>>> 'b' == ('a' or 'b')
False
>>> 'a' == ('a' and 'b')
False
>>> 'b' == ('a' and 'b')
True
54
![Page 55: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/55.jpg)
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
![Page 56: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/56.jpg)
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
![Page 57: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/57.jpg)
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”
57
![Page 58: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/58.jpg)
BMI (Body Mass Index) EX4
58
![Page 59: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/59.jpg)
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śd klasy I
[35, 40) Otyłośd klasy II
> 40 Otyłośd klasy III
59
![Page 60: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/60.jpg)
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
![Page 61: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/61.jpg)
Wersja I
• Korzystając z:
– Tylko typy proste
– Instrukcje: pętli, warunki
– Operacje numeryczne
– Komenda print,
– Funkcje: raw_input(), sys.exit()
61
![Page 62: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/62.jpg)
Wersja II
• Modyfikacja Wersji I:
– Użyj listy do definicji klasyfikatora BMI
62
![Page 63: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/63.jpg)
Funkcje
def <name>(arg1, arg2,... argN):
<statements>
return <value> #optional
n.p.:
def sayHello(who):
print 'Hello ‘, who
# End of function
63
![Page 64: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/64.jpg)
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
![Page 65: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/65.jpg)
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
![Page 66: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/66.jpg)
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
![Page 67: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/67.jpg)
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 zaimportowad wszystkie nazwy z modułu do przestrzeni globalnej modułu importując jego zawartośd.
• 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
![Page 68: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/68.jpg)
Reguła przeszukiwania LEGB
68
![Page 69: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/69.jpg)
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
![Page 70: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/70.jpg)
Argumenty funkcji
• Argumenty typów niemodyfikowalnych (Immutable) efektywnie są przekazywane przez wartośd (np. integer, string).
• Argumenty typów modyfikowalnych efektywnie są przekazywane przez referencję (np. listy, słowniki).
70
![Page 71: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/71.jpg)
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śd) 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
![Page 72: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/72.jpg)
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
![Page 73: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/73.jpg)
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
![Page 74: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/74.jpg)
Funkcje – dobra praktyka
• Funkcja powinna służyd do realizacji jednej dobrze określonej rzeczy i nie byd 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
![Page 75: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/75.jpg)
Wyjątki
try:
blok-try
except ErrorClass1:
blok-except1
except ErrorClass2:
blok-except2
except …
…
else:
blok-else
finally:
blok-finally
75
![Page 76: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/76.jpg)
Wyjątki - przykład
try:
a = 1/0
except:
print 'except'
else:
print 'ok'
finally:
print 'finally'
76
![Page 77: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/77.jpg)
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
![Page 78: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/78.jpg)
Składnia try/except/else/finally
Składnia Interpretacja
except: Łapie wyjątki wszystkich typów
except name: Łapie tylko wyjątki danego typu
except name as value: Łapie wyjątki danego typu oraz jego instancję
except (name1, name2): Łapie wyjątki danych typów
except (name1, name2) as value: Łapie wyjątki danych typów oraz ich instancję
else: Wykonywane gdy żaden wyjątek nie został zgłoszony
finally: Wykonywane ZAWSZE na koocu bloku except
78
![Page 79: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/79.jpg)
with/as
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
EX5
79
![Page 80: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/80.jpg)
MODUŁY
80
![Page 81: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/81.jpg)
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
![Page 82: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/82.jpg)
import
import <module1>, <module2>
from <module> import <name1>,
<name2>
from <module> import *
82
![Page 83: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/83.jpg)
sys.path
• Poszukiwanie pliku modułu:
1. Katalog domowy/bieżący (UWAGA na nazwy!)
2. Zmienna systemowa PYTHONPATH
3. Katalog biblioteki standardowej
4. Zawartośd plików .pth
• Powyższe tworzy ścieżkę przeszukiwania pamiętaną w sys.path
83
![Page 84: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/84.jpg)
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
![Page 85: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/85.jpg)
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
![Page 86: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/86.jpg)
Ładowanie modułów c.d.
• Przemianowanie podczas ładowania:
from math import sin as mysin
• Możliwośd przeładowania modułu:
reload(mymodule
86
![Page 87: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/87.jpg)
Przekrywanie nazw przy imporcie
from M import func
from N import func # ooops
func() # wywoła N.func!
------------------------------------------
import M, N # ładuje całe moduły
M.func() # wołamy M.func()
N.func() # wołamy N.func()
87
![Page 88: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/88.jpg)
‘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
![Page 89: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/89.jpg)
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
![Page 90: Język PYTHON ‑ narzędzie dla każdego naukowcaftp.us4us.eu/EDU/2009/Python-dla-naukowca/Python_dla... · 2011. 1. 4. · –Umieszczanie w kodzie programu funkcji print do śledzenia](https://reader033.vdocuments.site/reader033/viewer/2022052810/6081122492c7713c0b64ad12/html5/thumbnails/90.jpg)
Uruchamianie modułu jako skryptu
• Przydatne np. do testowania modułów
• Moduł uruchomiony jako skrypt if __name__ == '__main__':
print ‘Just self testing’
test1()
90