Popis
Kniha je třetím vydáním populární série „Recepty“, ve které najdete osvědčené způsoby řešení nejběžnějších problémů, které vznikají při programování v Phytonu.
Z čtení se naučíte, jak aktualizovat programy napsané ve starší verzi jazyka Phyton 2 na novější - Phyton 3. Kromě toho se naučíte, jak efektivně pracovat na celých číslech, datových strukturách a řetězcích. V této položce najdete také informace o tom, jak vytvářet vlastní funkce a jak přistupovat k souborům a sítím. Dozvíte se také, jak používat iterátory a generátory. Každý „recept“ obsahuje příklad kódu, který můžete použít ve svých vlastních projektech, spolu s komentářem a vysvětlením, jak kód funguje.
Obsah Předmluva (11) 1. Algoritmy a datové struktury (15) - 1.1. Extrakce sekvencí do samostatných proměnných
- 1.2. Extrahování prvků z iterovatelných objektů jakékoli délky (16)
- 1.3. Uložení posledních N položek (19)
- 1.4. Vyhledejte N největší nebo nejmenší prvek (20)
- 1.5. Vytvoření prioritní fronty 22
- 1.6. Mapování kláves na různé hodnoty slovníku
- 1.7. Určení pořadí ve slovnících (25)
- 1.8. Výpočty dat ze slovníků (26)
- 1.9. Hledání stejných dat ve dvou slovnících (28)
- 1.10. Odstranění opakování ze sekvencí při zachování pořadí prvků (29)
- 1.11. Pojmenovací klipy (30)
- 1.12. Identifikace nejběžnějších prvků v sekvenci (31)
- 1.13. Řazení seznamů slovníků podle běžných kláves (33)
- 1.14. Třídění objektů bez integrované podpory srovnání
- 1.15. Seskupování záznamů na základě hodnoty pole 35
- 1.16. Filtrování prvků sekvence
- 1.17. Načítání podmnožiny slovníku
- 1.18. Mapování jmen na prvky sekvence 40
- 1.19. Simultánní transformace a redukce dat 42
- 1.20. Kombinace více mapování do jednoho
2. Řetězce a text (47) - 2.1. Rozdělení řetězců po zjištění kteréhokoli z různých oddělovačů (47)
- 2.2. Přiřazení textu k počáteční nebo koncové části řetězce 48
- 2.3. Přiřazení řetězců pomocí zástupných znaků Shell 50
- 2.4. Shoda a vyhledávání textových vzorů 51
- 2.5. Najít a nahradit text (54)
- 2.6. Najít a nahradit text bez rozlišování malých a velkých písmen 55
- 2.7. Vytváření regulárních výrazů pro nejkratší shodu 56
- 2.8. Vytvářejte regulární výrazy, které odpovídají víceřádkovým vzorům 57
- 2.9. Převod textu Unicode na standardní formulář 58
- 2.10. Používání znaků Unicode v regulárních výrazech 60
- 2.11. Odstranění nežádoucích znaků z řetězců 61
- 2.12. Zajištění správnosti a organizovanosti textu (62)
- 2.13. Zarovnání řetězců 64
- 2.14. Kombinace strun 66
- 2.15. Nahrazování hodnot proměnných v řetězcích 68
- 2.16. Formátujte text a získejte stanovený počet sloupců 70
- 2.17. Zpracování entit HTML a XML v textu 71
- 2.18. Rozdělit text na tokeny (73)
- 2.19. Vytvoření jednoduchého rekurzivního analyzátoru down-top
- 2.20. Provádění textových operací na bajtových řetězcích
3. Čísla, data a čas (87) - 3.1. Zaokrouhlení čísel (87)
- 3.2. Provádění přesných desetinných míst 88
- 3.3. Formátování čísel pro zobrazení 90
- 3.4. Použití binárních, osmičkových a hexadecimálních celých čísel 92
- 3.5. Balení do bajtů a vybalení velkých celých čísel z bajtů 93
- 3.6. Provádění výpočtů komplexních čísel 95
- 3.7. Hodnoty nekonečna a NaN (96)
- 3.8. Výpočet se zlomky 98
- 3.9. Výpočet pomocí polí s velkým počtem 99
- 3.10. Provádění operací matice a rozsahu 102
- 3.11. Náhodné stahování položek (103)
- 3.12. Převod dní na sekundy a další základní časové převody 105
- 3.13. Zadání data z minulého pátku 107
- 3.14. Zadání časového období odpovídajícího aktuálnímu měsíci 108
- 3.15. Převod řetězců na objekty datetime 110
- 3.16. Manipulace s daty s ohledem na časová pásma (111)
4. Iterátory a generátory (113) - 4.1. Ruční použití iterátoru
- 4.2. Delegování iteračního procesu 114
- 4.3. Vytváření nových iteračních vzorů pomocí generátorů 115
- 4.4. Implementace protokolu Iterator 117
- 4.5. Iterace v opačném směru 119
- 4.6. Definování dalších funkcí generátoru stavu 120
- 4.7. Načítání řezů dat vrácených Iterátorem
- 4.8. Přeskočení první části iterovatelného objektu 122
- 4.9. Iterace ve všech možných kombinacích nebo permutacích 124
- 4.10. Rejstřík - Párování sekvenční hodnoty 125
- 4.11. Krokování více sekvencí současně 127
- 4.12. Procházení položkami ze samostatných kontejnerů 129
- 4.13. Budování potrubí zpracování dat 130
- 4.14. Převod vnořených sekvencí do jedné dimenze 133
- 4.15. Procházení sloučených seřazených objektů podle pořadí řazení 134
- 4.16. Výměna nekonečných while smyček s iterátorem 135
5. Soubory a I / O - 5.1. Čtení a zápis textových dat (137)
- 5.2. Ukládání dat z tisku () do souboru 139
- 5.3. Použití vlastních oddělovačů nebo konce řádku ve funkci tisku () 140
- 5.4. Čtení a zápis binárních dat (141)
- 5.5. Zápis dat do souboru, který neexistuje 142
- 5.6. Provádění I / O na řetězcích 143
- 5.7. Čtení a zápis komprimovaných datových souborů 144
- 5.8. Procházení záznamů pevné velikosti 145
- 5.9. Čtení binárních dat do proměnné vyrovnávací paměti 146
- 5.10. Mapování binárních souborů do paměti 148
- 5.11. Manipulace s cestami 150
- 5.12. Kontrola existence souboru 151
- 5.13. Načítání seznamu adresářů
- 5.14. Bez ohledu na kódování názvu souboru 153
- 5.15. Zobrazení neplatných názvů souborů
- 5.16. Přidání nebo změna kódování otevřeného souboru
- 5.17. Zápis bajtů do textového souboru 158
- 5.18. Umístění existujícího deskriptoru souboru do objektu souboru
- 5.19. Vytváření dočasných souborů a adresářů
- 5.20. Komunikace se sériovými porty
- 5.21. Serializace objektů Pythonu 163
6. Kódování a zpracování dat (167) - 6.1. Načítání a zápis dat CSV 167
- 6.2. Čtení a zápis dat ve formátu JSON 170
- 6.3. Analýza jednoduchých dat XML 174
- 6.4. Postupná analýza velmi velkých souborů XML
- 6.5. Převod slovníků na XML 179
- 6.6. Analýza, Úpravy a přepisování dokumentů XML 181
- 6.7. Analýza dokumentů XML s obory jmen 183
- 6.8. Komunikace s relačními databázemi 185
- 6.9. Hex dekódování a kódování (187)
- 6.10. Dekódujte a zakódujte hodnoty Base64 188
- 6.11. Čtení a zápis binárních polí obsahujících struktury 188
- 6.12. Načítání vnořených binárních struktur s proměnnou délkou 192
- 6.13. Shrnutí dat a výpočet statistik
7. Funkce (203) - 7.1. Funkce psaní, které vyžadují libovolný počet argumentů 203
- 7.2. Vytváření funkcí, které přijímají argumenty pouze s klíčovými slovy 204
- 7.3. Připojení metadat s informacemi k argumentům funkcí 205
- 7.4. Vrácení více hodnot podle funkcí
- 7.5. Definování funkce s výchozími argumenty 207
- 7.6. Definování anonymních (vložených) funkcí 210
- 7.7. Načítání proměnných hodnot v anonymních funkcích
- 7.8. Spuštění volajícího n-argumentu s menším počtem argumentů
- 7.9. Nahrazování tříd jednou metodou funkcemi 215
- 7.10. Další stav ve funkcích zpětného volání 216
- 7.11. Přímé psaní funkcí zpětného volání 219
- 7.12. Přístup k proměnným definovaným v závěru
8. Třídy a předměty 225 - 8.1. Úpravy textové reprezentace objektů 225
- 8.2. Úpravy formátování řetězců 226
- 8.3. Přidání zpracování protokolu Context Management Protocol k objektům 228
- 8.4. Snížení spotřeby paměti při vytváření velkého počtu objektů 230
- 8.5. Zapouzdření jmen ve třídě
- 8.6. Vytváření spravovaných atributů 232
- 8.7. Volání metod základní třídy 236
- 8.8. Rozšíření nemovitosti v odvozené třídě 240
- 8.9. Vytvoření nového druhu atributů třídy nebo instance 243
- 8.10. Použití Lazy vypočítaných vlastností 246
- 8.11. Zjednodušení inicializace datových struktur 248
- 8.12. Definování rozhraní nebo abstraktní základní třídy 251
- 8.13. Vytvoření datového modelu nebo typového systému
- 8.14. Vytvořte vlastní kontejnery 259
- 8.15. Delegování přístupu k atributům
- 8.16. Definování více než jednoho konstruktoru ve třídě
- 8.17. Vytváření objektů bez volání __init __ () 267
- 8.18. Rozšíření třídy o smíšené třídy 269
- 8.19. Implementace stavových objektů nebo stavových strojů 273
- 8.20. Volání metod na objektu na základě jména v řetězci 278
- 8.21. Implementace vzoru návštěvníků
- 8.22. Implementace vzoru návštěvníka bez rekurze
- 8.23. Správa paměti v cyklických datových strukturách 288
- 8.24. Vytváření tříd umožňujících srovnání 291
- 8.25. Vytváření objektů v mezipaměti 293
9. Metaprogramování (297) - 9.1. Vytváření překrytí na funkcích 297
- 9.2. Zachování metadat funkce při psaní dekoratérů
- 9.3. Načítání primární funkce z překrytí
- 9.4. Vytváření dekoratérů, které berou argumenty 302
- 9.5. Definování dekoratéra s uživatelsky přizpůsobitelnými atributy 303
- 9.6. Definování dekoratérů, kteří berou volitelný argument 306
- 9.7. Kontrola typu síly u funkcí pomocí dekoratéru
- 9.8. Definování dekoratérů jako prvků třídy
- 9.9. Definování dekoratérů jako tříd 312
- 9.10. Aplikování dekoratérů na třídní metody a statické metody
- 9.11. Psaní dekoratérů, které přidávají argumenty k funkcím v překryvných vrstvách 316
- 9.12. Použití dekoratérů k opravě definic tříd 319
- 9.13. Používání metaklasy k řízení vytváření objektů
- 9.14. Kontrola pořadí definování atributů třídy
- 9.15. Definování metaclass, které vyžadují volitelné argumenty
- 9.16. Kontrola podpisu s argumenty * args a ** kwargs
- 9.17. Prosazování konvencí pro psaní kódu ve třídě
- 9.18. Programové definování tříd
- 9.19. Inicializace členů třídy v definici třídy
- 9.20. Metody přetížení pomocí poznámek k funkcím
- 9.21. Vyhýbání se metodám duplicitních vlastností 342
- 9,22. Snadno definujte kontextové manažery
- 9.23. Provádění kódu s lokálními vedlejšími účinky 346
- 9,24. Analýza a analýza zdroje Pythonu
- 9,25. Demontáž kódu Pythonu
10. Moduly a balíčky (355) - 10.1. Vytváření hierarchických balíčků s moduly
- 10.2. Ovládání importu všech symbolů 356
- 10.3. Import submodulů z balíčku pomocí relativních jmen
- 10.4. Rozdělení modulu do více souborů 358
- 10.5. Vytváření samostatných adresářů s importovaným kódem z jednoho oboru názvů
- 10.6. Načítání modulů
- 10.7. Povolení provádění kódu z adresáře nebo souboru ZIP jako hlavního skriptu
- 10.8. Načítání datového souboru balíčku (365)
- 10.9. Přidání adresářů do proměnné sys.path 366
- 10.10. Import modulů podle názvu do řetězce 367
- 10.11. Načítání modulů ze vzdáleného počítače pomocí háků v příkazu Import
- 10.12. Úprava modulů během importu
- 10.13. Instalace balíčků pouze pro osobní použití
- 10.14. Vytvoření nového prostředí Pythonu
- 10.15. Distribuce balíčků
11. Sítě a vývoj webových aplikací (389) - 11.1. Interakce se službami HTTP pomocí kódu klienta 389
- 11.2. Vytváření serveru TCP
- 11.3. Vytvoření serveru UDP
- 11.4. Generování rozsahů IP adres z adresy CIDR
- 11.5. Vytvoření jednoduchého rozhraní založeného na REST 399
- 11.6. Zpracování jednoduchých vzdálených volání procedur pomocí XML-RPC
- 11.7. Jednoduchá komunikace mezi tlumočníky 405
- 11.8. Implementace vzdálených volání procedur
- 11.9. Jednoduché ověření klienta 410
- 11.10. Přidání podpory SSL do webových služeb
- 11.11. Předávání deskriptoru Socket File mezi procesy
- 11.12. Události řízené I / O operace
- 11.13. Odesílání a přijímání velkých polí 427
12. Souběžnost 429 - 12.1. Spouštění a zastavování vláken 429
- 12.2. Určení, zda vlákno začalo 432
- 12.3. Komunikace mezi vlákny 434
- 12.4. Uzamčení kritické sekce 439
- 12.5. Zamykání zabraňující zablokování
- 12.6. Uložení stavu vlákna 445
- 12.7. Vytvoření fondu vláken 446
- 12.8. Jednoduché paralelní programování 449
- 12.9. Jak se vypořádat (a přestat si dělat starosti s GIL) 453
- 12.10. Definování úkolů, které fungují jako aktéři 456
- 12.11. Zprávy publikování a odběru 459
- 12.12. Použití generátorů místo vláken 462
- 12.13. Dotazování více front vláken
- 12.14. Spuštění procesu Daemon na Unixu 471
13. Utilitní skripty a správa systému (475) - 13.1. Přijímání vstupu skriptu pomocí přesměrování, kanálů nebo vstupních souborů
- 13.2. Ukončení programu s chybovou zprávou (476)
- 13.3. Možnosti analýzy z příkazového řádku
- 13.4. Vyžádání hesla za běhu (479)
- 13.5. Načítání velikostí terminálu
- 13.6. Vyvolání externích příkazů a získání výstupu 481
- 13.7. Kopírování nebo přesouvání souborů a adresářů 482
- 13.8. Vytváření a extrahování archivů
- 13.9. Hledání souborů podle jména (485)
- 13.10. Načítání konfiguračních souborů 486
- 13.11. Přidání mechanismu záznamu akce k jednoduchým skriptům 489
- 13.12. Přidání podpory protokolování do knihoven
- 13.13. Vytvoření stopek 493
- 13.14. Omezení využití paměti a CPU 494
- 13.15. Spuštění webového prohlížeče (495)
14. Testování, ladění a výjimky 497 - 14.1. Testování výstupu do stdoutového proudu 497
- 14.2. Nahrazování objektů v testech jednotek
- 14.3. Kontrola výjimek v testech jednotek 501
- 14.4. Uložení zkušebního výstupu do souboru 503
- 14.5. Přeskočení testů nebo předvídání selhání testu 504
- 14.6. Zpracování více výjimek
- 14.7. Chytání všech výjimek 507
- 14.8. Vytváření vlastních výjimek 508
- 14.9. Vyvolání výjimky v reakci na jinou výjimku 510
- 14.10. Načítání poslední výjimky 512
- 14.11. Zobrazení varovných zpráv (513)
- 14.12. Ladění jednoduchých selhání programu
- 14.13. Doba běhu programu profilování a měření (516)
- 14.14. Urychlení vašich programů 518
15. Rozšíření v C - 15.1. Přístup k C kódu pomocí modulu ctypes 526
- 15.2. Psaní jednoduchých rozšiřujících modulů v jazyce C.
- 15.3. Zápis rozšiřujících funkcí pro manipulaci s poli 535
- 15.4. Správa neprůhledných ukazatelů v rozšiřujících modulech C.
- 15.5. Definování a export C API v rozšiřujících modulech
- 15.6. Vyvolání Pythonu z C kódu 544
- 15.7. Uvolnění zámku GIL na rozšíření C.
- 15.8. Současně Threading C a Python Code 549
- 15.9. Vkládání kódu C do překryvných vrstev 550
- 15.10. Použití Cythonu k překrytí existujícího kódu C 555
- 15.11. Použití Cythonu k zápisu efektivních operací s polem 560
- 15.12. Převod ukazatele na funkci do volatelné jednotky
- 15.13. Předávání řetězců zakončených NULL do knihoven C.
- 15.14. Předávání řetězců Unicode do knihoven C.
- 15.15. Převod řetězců z C na jejich ekvivalenty v Pythonu 573
- 15.16. Používání neznámých kódovacích řetězců daných z C 574
- 15.17. Předávání názvů souborů příponám na C.
- 15.18. Předávání otevřených souborů do rozšíření jazyka C
- 15,19. Načítání dat z objektů podobných souborům v C.
- 15.20. Získání iterovatelných objektů v jazyce C.
- 15.21. Diagnostika chyb segmentace 582
A. Další čtení (585) Rejstřík (587) |