Szczegóły ebooka

Python. Nowoczesne programowanie w prostych krokach. Wydanie II

Python. Nowoczesne programowanie w prostych krokach. Wydanie II

Bill Lubanovic

Ebook

Python nie jest językiem idealnym, jednak przybywa programistów, którzy uważają go za bliski ideału. Wyróżnia się prostotą i wszechstronnością. Jest wdzięcznym narzędziem do badania danych i tworzenia systemów sztucznej inteligencji, uwielbiają go analitycy, ekonomiści i naukowcy. Może posłużyć do tworzenia stron WWW czy aplikacji specjalnego przeznaczenia. Python należy do najbardziej spójnych i czytelnych języków programowania. Jest przykładem całkiem udanego kompromisu pomiędzy prostotą, łatwością przyswajania i wyjątkową skutecznością. Z pewnością warto się go nauczyć, jednak od początku dobrze jest wpoić sobie nawyki pisania kodu nowoczesnego, wysokiej jakości, zgodnego z dobrą praktyką.

Oto znakomity, przystępny i świetnie napisany podręcznik do nauki Pythona. Opisuje podstawy kodu i struktur danych i stopniowo wprowadza bardziej zaawansowane zagadnienia, takie jak praca z bazami danych i stronami WWW, podstawy działania chmury obliczeniowej, uczenia maszynowego i strumieniowania zdarzeń. Poza standardową biblioteką Pythona przedstawiono tu przydatne zewnętrzne pakiety, dokładniej opisano te najbardziej pomocne. Omówiono dobre praktyki tworzenia, testowania i diagnozowania kodu. Książka zawiera też mnóstwo wskazówek i przykładów kodu. Wyjaśnia pewne szczególne funkcjonalności Pythona, których stosowanie jest o wiele lepszym rozwiązaniem niż adaptowanie technik z innych języków. Nawet jeśli dziś o programowaniu wiesz mniej niż niewiele, dzięki temu podręcznikowi staniesz się prawdziwym pythonowcem!

W tej książce między innymi:

  • podstawy Pythona oraz funkcje, moduły i pakiety
  • programowanie zorientowane obiektowo
  • praca z bazami danych: relacyjnymi i NoSQL
  • klienty internetowe, serwery, interfejsy API i usługi
  • zarządzanie programami, procesami i wątkami
  • implementacja współbieżności i komunikacji sieciowej

Problemy? Rozwiąż je po pythonowsku!


Wstęp 21

CZĘŚĆ I. PODSTAWY PYTHONA

1. Przedsmak Pythona 29

  • Zagadki 29
  • Kilka małych programów 31
  • Większy program 33
  • Python w praktyce 36
  • Python i inne języki 37
  • Dlaczego właśnie Python? 39
  • Kiedy nie używać Pythona? 41
  • Wersje Pythona 2 i 3 42
  • Instalacja Pythona 42
  • Uruchomienie Pythona 42
    • Interaktywny interpreter 43
    • Skrypty 43
    • Co dalej? 44
  • Twoja chwila zen 44
  • Już wkrótce 45
  • Do zrobienia 45

2. Dane - typy, wartości, zmienne i nazwy 47

  • Dane w Pythonie to obiekty 47
  • Typy danych 48
  • Mutowalność 49
  • Wartości 49
  • Zmienne 50
  • Przypisania 51
  • Zmienne to nazwy, a nie miejsca w pamięci 52
  • Przypisania wielokrotne 55
  • Ponowne przypisania 55
  • Kopiowanie 55
  • Nadawaj zmiennym właściwe nazwy 56
  • Już wkrótce 57
  • Do zrobienia 57

3. Liczby 59

  • Typ logiczny 59
  • Typ całkowity 60
    • Literały 60
    • Działania 61
    • Zmienne 63
    • Kolejność działań 65
    • Podstawa systemu liczbowego 65
    • Konwersja typów 68
    • Jak duża może być liczba całkowita? 69
  • Typ zmiennoprzecinkowy 70
  • Funkcje matematyczne 71
  • Już wkrótce 71
  • Do zrobienia 72

4. Podejmowanie decyzji, czyli instrukcja if 73

  • Komentowanie za pomocą znaku # 73
  • Kontynuacja wiersza za pomocą znaku \ 74
  • Sprawdzanie za pomocą instrukcji if, elif i else 75
  • Co oznacza True? 77
  • Wielokrotne sprawdzanie za pomocą operatora in 78
  • Nowość: operator walrus 79
  • Już wkrótce 80
  • Do zrobienia 80

5. Ciągi znaków 81

  • Tworzenie ciągu znaków za pomocą cudzysłowów i apostrofów 81
  • Tworzenie ciągu za pomocą funkcji str() 84
  • Ucieczka ze znakiem \ 84
  • Łączenie ciągów za pomocą znaku + 85
  • Powielanie ciągu za pomocą znaku * 86
  • Wyodrębnianie znaku za pomocą nawiasów [] 86
  • Wyodrębnianie fragmentu ciągu za pomocą wycinka 87
  • Określanie długości ciągu za pomocą funkcji len() 89
  • Dzielenie ciągu za pomocą funkcji split() 89
  • Łączenie ciągów za pomocą funkcji join() 90
  • Zastępowanie fragmentów ciągu za pomocą funkcji replace() 90
  • Przycinanie ciągu za pomocą funkcji strip() 91
  • Przeszukiwanie i wybieranie ciągów znaków 92
  • Wielkości liter 93
  • Wyrównywanie ciągu znaków 94
  • Formatowanie ciągów znaków 94
    • Formatowanie w starym stylu za pomocą znaku % 94
    • Formatowanie w starym stylu za pomocą znaków {} i funkcji format() 97
    • Najnowszy styl formatowania: f-ciągi 98
  • Więcej o ciągach 99
  • Już wkrótce 99
  • Do zrobienia 100

6. Pętle while i for 101

  • Powtarzanie operacji za pomocą instrukcji while 101
    • Przerywanie pętli za pomocą instrukcji break 102
    • Powrót na początek pętli za pomocą instrukcji continue 102
    • Sprawdzanie przerwania pętli za pomocą instrukcji else 103
  • Iterowanie za pomocą instrukcji for i in 103
    • Przerywanie pętli za pomocą instrukcji break 104
    • Powrót na początek pętli za pomocą instrukcji continue 104
    • Sprawdzanie przerwania pętli za pomocą instrukcji else 104
    • Generowanie sekwencji liczb za pomocą funkcji range() 105
  • Inne iteratory 106
  • Już wkrótce 106
  • Do zrobienia 106

7. Krotki i listy 107

  • Krotki 107
    • Tworzenie krotek za pomocą przecinków i nawiasów 107
    • Tworzenie krotek za pomocą funkcji tuple() 109
    • Łączenie krotek za pomocą znaku dodawania 109
    • Powielanie elementów krotki za pomocą znaku mnożenia 109
    • Porównywanie krotek 109
    • Iterowanie krotek za pomocą instrukcji for i in 109
    • Modyfikowanie krotek 110
  • Listy 110
    • Tworzenie list za pomocą nawiasów kwadratowych 110
    • Tworzenie i przekształcanie list za pomocą funkcji list() 111
    • Tworzenie list z ciągów za pomocą funkcji split() 111
    • Odczytywanie elementu listy za pomocą nawiasów kwadratowych i indeksu 112
    • Wyodrębnianie elementów listy za pomocą wycinków 112
    • Dołączanie elementu do listy za pomocą funkcji append() 113
    • Wstawianie elementu wewnątrz listy za pomocą funkcji insert() 113
    • Powielanie elementów listy za pomocą znaku mnożenia 114
    • Łączenie list za pomocą funkcji extend() i znaku dodawania 114
    • Modyfikowanie elementu listy za pomocą nawiasów kwadratowych i indeksu 114
    • Modyfikowanie elementów listy za pomocą wycinka 115
    • Usuwanie elementu listy za pomocą instrukcji del i indeksu 115
    • Usuwanie elementu o zadanej wartości za pomocą funkcji remove() 116
    • Odczytywanie i usuwanie elementu listy za pomocą funkcji pop() 116
    • Usuwanie wszystkich elementów listy za pomocą funkcji clear() 116
    • Wyszukiwanie elementu o zadanej wartości za pomocą funkcji index() 117
    • Sprawdzanie zawartości listy za pomocą instrukcji in 117
    • Zliczanie wystąpień wartości za pomocą funkcji count() 117
    • Przekształcenie listy w ciąg znaków za pomocą funkcji join() 117
    • Zmienianie kolejności elementów za pomocą funkcji sort() i sorted() 118
    • Sprawdzanie długości listy za pomocą funkcji len() 119
    • Przypisywanie listy zmiennej za pomocą znaku równości 119
    • Kopiowanie listy za pomocą funkcji copy() i list() oraz wycinka 119
    • Kopiowanie zawartości listy za pomocą funkcji deepcopy() 120
    • Porównywanie list 121
    • Iterowanie listy za pomocą instrukcji for i in 121
    • Iterowanie kilku list za pomocą funkcji zip() 122
    • Tworzenie listy za pomocą wyrażenia listowego 123
    • Listy list 125
  • Krotki a listy 126
  • Nie ma wyrażeń krotkowych 126
  • Już wkrótce 126
  • Do zrobienia 127

8. Słowniki i zbiory 129

  • Słowniki 129
    • Tworzenie słownika za pomocą nawiasów klamrowych 129
    • Tworzenie słownika za pomocą funkcji dict() 130
    • Przekształcanie struktury w słownik za pomocą funkcji dict() 130
    • Dodawanie i zmienianie elementów słownika za pomocą nawiasów kwadratowych i klucza 131
    • Odczytywanie wartości za pomocą nawiasów kwadratowych i klucza oraz funkcji get() 132
    • Odczytywanie wszystkich kluczy za pomocą funkcji keys() 133
    • Odczytywanie wszystkich wartości za pomocą funkcji values() 133
    • Odczytywanie wszystkich par klucz-wartość za pomocą funkcji items() 133
    • Odczytywanie długości słownika za pomocą funkcji len() 133
    • Łączenie słowników za pomocą nawiasów klamrowych i znaków mnożenia 134
    • Łączenie słowników za pomocą funkcji update() 134
    • Usuwanie elementu słownika za pomocą instrukcji del i klucza 135
    • Odczytywanie i usuwanie elementu słownika za pomocą funkcji pop() 135
    • Usuwanie wszystkich elementów słownika za pomocą funkcji clear() 135
    • Sprawdzanie dostępności klucza za pomocą instrukcji in 136
    • Przypisywanie wartości za pomocą znaku równości 136
    • Kopiowanie słownika za pomocą funkcji copy() 136
    • Kopiowanie zawartości słownika za pomocą funkcji deepcopy() 137
    • Porównywanie słowników 138
    • Iterowanie elementów słownika za pomocą instrukcji for i in 138
    • Wyrażenia słownikowe 139
  • Zbiory 140
    • Tworzenie zbioru za pomocą funkcji set() 140
    • Przekształcanie struktury w zbiór za pomocą funkcji set() 141
    • Odczytywanie długości zbioru za pomocą funkcji len() 141
    • Dodawanie elementów do zbioru za pomocą funkcji add() 141
    • Usuwanie elementów zbioru za pomocą funkcji remove() 142
    • Iterowanie zbioru za pomocą instrukcji for i in 142
    • Sprawdzanie dostępności elementu za pomocą instrukcji in 142
    • Kombinacje wartości i operatory 143
    • Wyrażenia zbiorowe 145
    • Tworzenie niemutowalnych zbiorów za pomocą funkcji frozenset() 146
  • Poznane struktury danych 146
  • Tworzenie większych struktur 147
  • Już wkrótce 148
  • Do zrobienia 148

9. Funkcje 149

  • Definiowanie funkcji za pomocą instrukcji def 149
  • Wywołanie funkcji z nawiasami 150
  • Argumenty i parametry 150
    • Wartość None jest przydatna 152
    • Argumenty pozycyjne 153
    • Argumenty nazwane 153
    • Domyślne wartości parametrów 154
    • Rozbijanie/zbieranie argumentów pozycyjnych za pomocą znaku * 155
    • Rozbijanie/zbieranie argumentów nazwanych za pomocą znaków ** 156
    • Stosowanie wyłącznie argumentów nazwanych 157
    • Argumenty mutowalne i niemutowalne 158
  • Komentarze dokumentacyjne 158
  • Funkcje jako typy pierwszoklasowe 159
  • Funkcje wewnętrzne 161
    • Domknięcia 161
  • Funkcje anonimowe: wyrażenia lambda 162
  • Generatory 163
    • Funkcje generatorowe 163
    • Wyrażenia generatorowe 164
  • Dekoratory 164
  • Przestrzenie nazw i zakresy widoczności 166
  • Podwójne znaki podkreślenia w nazwach 168
  • Rekurencja 169
  • Funkcje asynchroniczne 170
  • Wyjątki 170
    • Obsługiwanie wyjątków za pomocą instrukcji try i except 171
    • Definiowanie własnych wyjątków 172
  • Już wkrótce 173
  • Do zrobienia 173

10. Obiekty i klasy 175

  • Czym jest obiekt? 175
  • Proste obiekty 176
    • Definiowanie klasy 176
    • Atrybuty 177
    • Metody 178
    • Inicjacja obiektu 178
  • Dziedziczenie klas 179
    • Dziedziczenie klasy nadrzędnej 179
    • Nadpisywanie metod 181
    • Dodawanie metod 182
    • Odwołanie do klasy nadrzędnej za pomocą metody super() 182
    • Dziedziczenie wielu klas 183
    • Domieszki 185
  • Argument self 185
  • Dostęp do atrybutów 186
    • Dostęp bezpośredni 186
    • Gettery i settery 186
    • Dostęp do atrybutów za pośrednictwem właściwości 187
    • Właściwości zwracające wyliczane wartości 188
    • Prywatność dzięki modyfikacji nazwy 189
    • Atrybuty klas i obiektów 190
  • Rodzaje metod 191
    • Metody instancji 191
    • Metody klasy 191
    • Metody statyczne 192
  • Kacze typowanie 192
  • Magiczne metody 194
  • Agregowanie i komponowanie klas 196
  • Kiedy stosować obiekty, a kiedy inne struktury 197
  • Nazwane krotki 198
  • Klasy danych 199
  • Pakiet attrs 200
  • Już wkrótce 201
  • Do zrobienia 201

11. Moduły, pakiety i inne rzeczy 203

  • Moduły i instrukcja import 203
    • Importowanie modułu 203
    • Importowanie modułu z przemianowaniem 205
    • Importowanie tylko tego, co jest potrzebne 205
  • Pakiety 206
    • Ścieżka wyszukiwania modułów 207
    • Importowanie względne i bezwzględne 208
    • Przestrzenie pakietów 208
    • Moduły a obiekty 209
  • Przydatne rzeczy w standardowej bibliotece Pythona 210
    • Obsługa brakujących kluczy za pomocą funkcji setdefault() i defaultdict() 210
    • Zliczanie elementów za pomocą klasy Counter 212
    • Porządkowanie elementów według klucza za pomocą klasy OrderedDict 213
    • Stos + kolejka == deque 213
    • Iterowanie struktur danych za pomocą modułu itertools 214
    • Czytelne wyświetlanie za pomocą funkcji pprint() 215
    • Wartości losowe 216
  • Więcej narzędzi: zewnętrzny kod 217
  • Już wkrótce 217
  • Do zrobienia 217

CZĘŚĆ II. PYTHON W PRAKTYCE

12. Żonglowanie danymi 221

  • Dane tekstowe - kodowanie Unicode 222
    • Kodowanie Unicode w Pythonie 3 222
    • Schemat UTF-8 225
    • Kodowanie znaków 225
    • Dekodowanie znaków 227
    • Kody HTML 228
    • Normalizowanie znaków 229
    • Dodatkowe informacje 230
  • Dane tekstowe - wyrażenia regularne 230
    • Wyszukiwanie dokładnego początkowego dopasowania za pomocą funkcji match() 231
    • Wyszukiwanie pierwszego dopasowania za pomocą funkcji search() 233
    • Wyszukiwanie wszystkich dopasowań za pomocą funkcji findall() 233
    • Dzielenie ciągu według dopasowań za pomocą funkcji split() 233
    • Zastępowanie dopasowań za pomocą funkcji sub() 234
    • Wzorce: znaki specjalne 234
    • Wzorce: specyfikatory 235
    • Wzorce: określanie formatu wyniku funkcji 238
  • Dane binarne 238
    • Struktury bytes i bytearray 238
    • Konwertowanie danych binarnych za pomocą modułu struct 240
    • Inne narzędzia do przetwarzania danych binarnych 242
    • Konwertowanie bajtów i ciągów znaków za pomocą modułu binascii 243
    • Operatory bitowe 243
  • Już wkrótce 244
  • Do zrobienia 244

13. Data i czas 247

  • Rok przestępny 248
  • Moduł datetime 248
  • Moduł time 251
  • Odczytywanie i wyświetlanie daty i czasu 253
  • Wszystkie przekształcenia 256
  • Alternatywne moduły 257
  • Już wkrótce 257
  • Do zrobienia 257

14. Pliki i katalogi 259

  • Zapisywanie i odczytywanie plików 259
    • Tworzenie i otwieranie plików za pomocą funkcji open() 259
    • Zapisywanie danych tekstowych za pomocą instrukcji print() 260
    • Zapisywanie danych tekstowych za pomocą instrukcji write() 261
    • Odczytywanie pliku tekstowego za pomocą funkcji read(), readline() i readlines() 262
    • Zapisywanie danych binarnych za pomocą funkcji write() 264
    • Odczytywanie danych binarnych za pomocą funkcji read() 264
    • Automatyczne zamykanie pliku za pomocą instrukcji with 265
    • Przesuwanie wskaźnika za pomocą funkcji seek() 265
  • Mapowanie pamięci 267
  • Operacje na plikach 267
    • Sprawdzanie dostępności pliku za pomocą funkcji exists() 267
    • Sprawdzanie rodzaju elementu za pomocą funkcji isfile() 267
    • Kopiowanie pliku za pomocą funkcji copy() 268
    • Zmienianie nazwy pliku za pomocą funkcji rename() 268
    • Tworzenie odnośników za pomocą funkcji link() i symlink() 268
    • Zmienianie uprawnień do pliku za pomocą funkcji chmod() 269
    • Zmienianie właściciela pliku za pomocą funkcji chown() 269
    • Usuwanie pliku za pomocą funkcji remove() 269
  • Operacje na katalogach 270
    • Tworzenie katalogu za pomocą funkcji mkdir() 270
    • Usuwanie katalogu za pomocą funkcji rmdir() 270
    • Odczytywanie zawartości katalogu za pomocą funkcji listdir() 270
    • Zmienianie katalogu za pomocą funkcji chdir() 271
    • Wyszukiwanie plików i katalogów za pomocą funkcji glob() 271
  • Nazwy ścieżek 271
    • Uzyskiwanie ścieżki za pomocą funkcji abspath() 272
    • Uzyskiwanie ścieżki na podstawie symbolicznego odnośnika za pomocą funkcji realpath() 272
    • Tworzenie ścieżki za pomocą funkcji os.path.join() 272
    • Moduł pathlib 273
  • Klasy BytesIO i StringIO 274
  • Już wkrótce 275
  • Do zrobienia 275

15. Dane w czasie, czyli procesy i współbieżność 277

  • Programy i procesy 277
    • Tworzenie procesu za pomocą modułu subprocess 278
    • Tworzenie procesu za pomocą modułu multiprocessing 279
    • Przerywanie procesu za pomocą funkcji terminate() 280
    • Uzyskiwanie informacji systemowych za pomocą modułu os 280
    • Uzyskiwanie informacji o procesie za pomocą pakietu psutil 281
  • Automatyzacja poleceń 282
    • Pakiet invoke 282
    • Inne przydatne pakiety 283
  • Współbieżność 283
    • Kolejki 284
    • Procesy 285
    • Wątki 285
    • Moduł concurrent.futures 288
    • Zielone wątki i biblioteka gevent 290
    • Moduł twisted 293
    • Biblioteka asyncio 294
    • Biblioteka Redis 294
    • Nie tylko kolejki 297
  • Już wkrótce 298
  • Do zrobienia 298

16. Dane w pudełku, czyli trwałe zapisywanie 299

  • Płaskie pliki tekstowe 299
  • Dopełniane pliki tekstowe 299
  • Tabelaryczne pliki tekstowe 300
    • Format CSV 300
    • Format XML 302
    • Dane XML i bezpieczeństwo systemu 304
    • Format HTML 305
    • Format JSON 305
    • Format YAML 308
    • Moduł tablib 309
    • Biblioteka Pandas 309
    • Pliki konfiguracyjne 310
  • Pliki binarne 311
    • Dopełniane pliki binarne i mapowanie pamięci 311
    • Arkusze kalkulacyjne 312
    • Format HDF5 312
    • Format TileDB 312
  • Relacyjne bazy danych 312
    • Język SQL 313
    • Interfejs DB-API 315
    • Baza SQLite 315
    • Baza MySQL 317
    • Baza PostgreSQL 317
    • Biblioteka SQLAlchemy 318
    • Inne pakiety do obsługi baz danych 323
  • Bazy danych NoSQL 323
    • Rodzina formatów dbm 323
    • Baza Memcached 324
    • Baza Redis 325
    • Bazy dokumentowe 331
    • Bazy danych czasowych 332
    • Bazy grafowe 332
    • Inne bazy NoSQL 333
  • Bazy pełnotekstowe 333
  • Już wkrótce 334
  • Do zrobienia 334

17. Dane w przestrzeni, czyli sieć 335

  • Protokoły sieciowe 335
    • Gniazda sieciowe 336
    • Narzędzie Scapy 340
    • Narzędzie Netcat 341
  • Zasady komunikacji sieciowej 341
  • Zasada "zapytanie-odpowiedź" 341
    • Biblioteka ZeroMQ 342
    • Inne narzędzia do przesyłania komunikatów 345
  • Zasada "publikuj-subskrybuj" 346
    • Serwer Redis 346
    • Biblioteka ZeroMQ 347
    • Inne narzędzia typu "publikuj-subskrybuj" 349
  • Usługi internetowe 349
    • Usługa DNS 349
    • Moduły do obsługi poczty e-mail 350
    • Inne protokoły 350
  • Usługi WWW i interfejsy API 351
  • Serializacja danych 351
    • Moduł pickle 352
    • Inne formaty serializacyjne 353
  • Protokół RPC 353
    • Protokół XML-RPC 354
    • Protokół JSON-RPC 355
    • Biblioteka MessagePack RPC 356
    • Biblioteka zerorpc 357
    • Biblioteka gRPC 357
    • Biblioteka Twirp 358
  • Narzędzia do zdalnego zarządzania 358
  • Big Fat Data 359
    • Hadoop 359
    • Spark 359
    • Disco 360
    • Dask 360
  • Chmury 360
    • Amazon Web Services 361
    • Google Cloud 362
    • Microsoft Azure 362
    • OpenStack 362
  • Docker 362
    • Kubernetes 362
  • Już wkrótce 363
  • Do zrobienia 363

18. Sieć WWW 365

  • Klienci internetowi 366
    • Testowanie strony za pomocą programu telnet 367
    • Testowanie strony za pomocą programu curl 368
    • Testowanie strony za pomocą programu httpie 369
    • Testowanie strony za pomocą programu httpbin 369
    • Standardowe biblioteki WWW w Pythonie 369
    • Nie tylko standardowa biblioteka: moduł requests 371
  • Serwery WWW 373
    • Najprostszy serwer WWW 373
    • Interfejs WSGI 374
    • Interfejs ASGI 375
    • Serwer Apache 375
    • Serwer NGINX 376
    • Inne serwery WWW dla języka Python 377
  • Platformy dla serwerów WWW 377
    • Platforma Bottle 378
    • Platforma Flask 380
    • Platforma Django 384
    • Inne platformy 384
  • Platformy bazodanowe 385
  • Usługi WWW i automatyzacja 385
    • Moduł webbrowser 386
    • Moduł webview 386
  • Interfejsy API i REST 387
  • Automatyczne wyszukiwanie danych 388
    • Scrapy 388
    • BeautifulSoup 388
    • Moduł requests-html 389
  • Obejrzyjmy film 390
  • Już wkrótce 391
  • Do zrobienia 392

19. Stań się pythonistą 393

  • O programowaniu 393
  • Skąd wziąć kod? 394
  • Instalowanie pakietów 394
    • Program pip 395
    • Program virtualenv 395
    • Program pipenv 396
    • Menedżer pakietów 396
    • Instalacja plików źródłowych 396
  • Środowiska IDE 397
    • IDLE 397
    • PyCharm 397
    • IPython 398
    • Jupyter Notebook 399
    • JupyterLab 399
  • Nazwy i dokumentacja 399
  • Wskazówki typów 401
  • Testy 401
    • Programy pylint, pyflakes, flake8 i pep8 402
    • Pakiet unittest 403
    • Pakiet doctest 407
    • Pakiet nose 408
    • Inne platformy testujące 409
    • Ciągła integracja 409
  • Diagnostyka kodu 410
    • Funkcja print() 410
    • Dekoratory 411
    • Moduł pdb 412
    • Funkcja breakpoint() 417
  • Rejestrowanie komunikatów o błędach 417
  • Optymalizacja kodu 419
    • Pomiary czasu 419
    • Algorytmy i struktury danych 422
    • Cython, NumPy i rozszerzenia C 423
    • PyPy 424
    • Numba 424
  • Kontrola wersji kodu 425
    • Mercurial 425
    • Git 425
  • Rozpowszechnianie programów 428
  • Dowiedz się więcej 428
    • Książki 428
    • Strony internetowe 429
    • Grupy 429
    • Konferencje 429
    • Praca 430
  • Już wkrótce 430
  • Do zrobienia 430

20. Python w sztuce 431

  • Grafika dwuwymiarowa 431
    • Standardowa biblioteka 431
    • Biblioteki PIL i Pillow 432
    • ImageMagick 435
  • Grafika trójwymiarowa 436
  • Animacja trójwymiarowa 436
  • Graficzne interfejsy użytkownika 436
  • Wykresy i wizualizacja danych 438
    • Matplotlib 438
    • Seaborn 440
    • Bokeh 441
  • Gry 442
  • Dźwięk i muzyka 442
  • Już wkrótce 443
  • Do zrobienia 443

21. Python w biznesie 445

  • Pakiety biurowe 445
  • Operacje biznesowe 446
  • Przetwarzanie danych biznesowych 447
    • Wyodrębnianie, przekształcanie i ładowanie danych 447
    • Weryfikacja poprawności danych 450
    • Dodatkowe źródła informacji 451
  • Otwarte pakiety biznesowe 451
  • Python i finanse 451
  • Bezpieczeństwo danych finansowych 452
  • Mapy 452
    • Formaty danych 453
    • Wyświetlanie map w formacie shapefile 453
    • Geopandas 455
    • Inne pakiety kartograficzne 457
    • Aplikacje i dane 458
  • Już wkrótce 459
  • Do zrobienia 459

22. Python w nauce 461

  • Matematyka i statystyka w standardowej bibliotece 461
    • Funkcje matematyczne 461
    • Liczby zespolone 463
    • Precyzja obliczeń i moduł decimal 464
    • Działania na ułamkach zwykłych 464
    • Klasa array, czyli spakowana sekwencja wartości 465
    • Prosta statystyka w module statistics 465
    • Mnożenie macierzy 465
  • Naukowy Python 465
  • Pakiet NumPy 466
    • Tworzenie tablicy za pomocą funkcji array() 467
    • Tworzenie tablicy za pomocą funkcji arange() 467
    • Tworzenie tablicy za pomocą funkcji zeros(), ones() i random() 468
    • Zmienianie kształtu tablicy za pomocą metody reshape() 469
    • Odwoływanie się do elementów tablicy za pomocą nawiasów [] 469
    • Działania na tablicach 470
    • Algebra liniowa 471
  • Biblioteka SciPy 472
  • Biblioteka SciKit 472
  • Biblioteka Pandas 473
  • Python w różnych dziedzinach nauki 473
  • Już wkrótce 474
  • Do zrobienia 474

A. Sprzęt i oprogramowanie dla początkującego programisty 475

B. Instalacja Pythona 3 485

C. Coś z zupełnie innej beczki: asynchroniczność 493

D. Rozwiązania zadań 499

E. Ściągawka 539

  • Tytuł: Python. Nowoczesne programowanie w prostych krokach. Wydanie II
  • Autor: Bill Lubanovic
  • Tytuł oryginału: Introducing Python: Modern Computing in Simple Packages
  • Tłumaczenie: Andrzej Watrak
  • ISBN: 978-83-283-6843-9, 9788328368439
  • Data wydania: 2020-11-17
  • Format: Ebook
  • Identyfikator pozycji: pythno
  • Wydawca: Helion