Wstęp do języka
dr inż. Jarosław Drapała
Danologia
•proceduralny
•funkcjonalny
•obiektowy
wieloparadygmatowy
•przenośność programów
•łączy różne języki
•integracja komponentów
ogólnego przeznaczenia
otwarty dostęp
•„skryptowy ” – bo tryb programowania jest szybki i elastyczny
zorientowany obiektowo skryptowy język
„uniwersalny
język programowania”
T WÓ RCY MO G LI TO ZAP LAN O W AĆ
Cechy
czytelny kod prosta składnia
szybkość programowania
„wykonywalny pseudokod”
M U SIE LI SIĘ BARDZ O PO ST ARAĆ
produktywność programisty
•import this
jakość oprogramowania łatwy do nauczenia
•wbudowane narzędzia
•dedykowane biblioteki
bogate zasoby
K O N SE KWE N CJ E
szybkie prototypowanie
Cechy
T AK WY SZ ŁO
prędkość działania programów
Python
≤ języki kompilujące
na binarny maszynowy kod
zbyt szybka ewolucja
konieczność nadążania za
zmianami
zależność od kaprysów użytkowników
jak każdy produkt otwartoźródł
owy (ang.
open source)
dwie linie
2.X
3.X
Wady
S POS OB Y T EC HNI CZNE O SIĄ G N IĘ CIA CE LU
Zasady działania
dynamiczne typy danych
•brak deklaracji typu
•automatyczne
zarządzanie pamięcią
kompilacja
„w locie”
•kompilacja do kodu bajtowego
wszystko jest obiektem
Model wykonywania kodu
plik.py kod źródłowy
plik.pyc kod bajtowy
silnik wykonawczy (ang. runtime engine)
interpreter
Maszyna wirtualna Pythona
(ang. Python Virtual Machine – PVM)
kompilacja
__pycache__
niezależna od platformy reprezentacja kodu źródłowego
interpretacja wykonanie
aplikacja
kod skompilowany w C ......
Model wykonywania kodu
plik.py kod źródłowy
plik.pyc
kod bajtowy PVM aplikacja
Implementacja Pythona
CPython
standardowa Implementacja
W ANSI C
PyPy
kompiluje do kodu bajtowego
C, Javy
Stackless
programowanie współbieżne
Jython
...
Model wykonywania kodu
Zamrożone pliki binarne (ang. frozen binaries)
bajtowykod
PVM
pliki pomocnicze
• py2exe (Windows)
• pyInstaller (także Linux i macOS)
• py2app (macOS)
• freeze
• cx_freeze
Uruchamianie programów
• Sesja interaktywna
• eksperymentowanie
• testowanie
• IDE / IDLE
(Integrated Development and Learning Environment)
• środowisko programistyczne z GUI (tkinter)
• łączy różne zadania programistyczne w jeden widok
• edycja, przegląd, debugowanie
• wady: mniejsza kontrola nad aspektami uruchamiania
https://jupyter.org/hub
https://nbviewer.jupyter.org/
https://www.anaconda.com/
Typ Literał – wyrażenie generujące obiekt
liczba 3.14 3+4j 2e-3
łańcuch
znaków 'noszę stringi' "czytam 'Fakt'" wyrażenia formatujące split, ','.join(), replace
lista [1, 2, 'trzy', 4j, ["pięć"]] widoki, wycinki sort, sorted, index, count, append, ...
słownik {'imię':'Bożena', 'wiek':None, 'zarobki':5900, 'karana':True} macierze rzadkie
krotka (255, 255, 0)
plik open('apsztyfikanci.txt', 'a') pickle, json
zbiór set('rabarbar') & | - > ^
inne Boolean None
Wbudowane typy danych
Wbudowane typy danych
• uporządkowane kolekcje obiektów
• stringi, listy, krotki, pliki
sekwencje
• mapowania
• słowniki
odwzorowania
mutowalne (ang. mutable)
• można zmieniać w miejscu
• listy, słowniki, zbiory
niemutowalne (ang. immutable)
• nie da się zmienić w miejscu
• liczby, stringi, krotki
Czym jest obiekt
Miejsce w pamięci Desygnator typu
Licznik referencji
obiekt
zmienne = uniwersalne referencje do obiektów typ ma obiekt
zmienna
przypisania vs widoki
Instrukcje
przypisania
a, b =first, *lastx = 'kolejka' a, b = b, arozgałęzienia
if war1:
instr1 elif war2:
instr2 else:
instrN
emulacja instrukcji switch słownikiem
Funkcje
def• razy(arg1, arg2):
return arg1 * arg2
polimorfizm
Instrukcje
powtórzenia
while test:
instr1
else: # jeśli pętli nie zakończył break instr2
for elem in obiekt:
instr1 else:
instr2 range
enumeratezip
filtermap reduce
Protokół iteracji
Narzędzia iteracyjne / kontekst iteracyjny
• pętla for
• złożenia (np. listy składane)
• odwzorowania (ang. mappings), np. słowniki
Obiekt iterowalny (ang. iterable)
• listy
• pliki
• generatory
Obiekt iteratora (ang. iterator)
next() next() next() ...
StopIteration
Złożenia
• lista składana (ang. list comprehension)
• słownik składany
• zbiór składany
• wyrażenie generatora
[ wyrażenie for cel in obiekt iterowalny if warunek ]
Funkcje
Funkcje nazwane
•
def nazwa(args):
return args
nazwa.atrybut = wartość x = nazwa('kontrola')
instrukcja
Funkcje anonimowe
•f = lambda x, y: x * y
wyrażenie
•global
•nonlocal
Zasięgi
•niemutowalne przez wartość
•mutowalne przez referencję Przekazywanie
argumentów
Własne typy obiektów
class Student:
def __init__(self, imię, wydział):
self.imię = imię def zapisz(self, kurs):
...