Book description
Python to j?zyk programowania z ponad 20-letni? histori?. Opracowany na pocz?tku lat 90. ubieg?ego wieku, b?yskawicznie zdoby? sympati? programistów. Jest u?ywany zarówno do pisania przydatnych skryptów czy ma?ych narz?dzi, jak i do pracy nad du?ymi projektami. Korzysta z automatycznego zarz?dzania pami?ci? oraz pozwala na podej?cie obiektowe i funkcyjne do tworzonego programu. Wokó? j?zyka Python skupiona jest bardzo silna spo?eczno?? programistów.
Ta ksi??ka to sprawdzone ?ród?o informacji na temat Pythona i jego najcz?stszych zastosowa?. Nale?y ona do cenionej serii „Receptury”, w której znajdziesz najlepsze sposoby rozwi?zywania problemów. Przekonaj si?, jak wydajnie operowa? na strukturach danych, ?a?cuchach znaków, tek?cie i liczbach. Zobacz, jak korzysta? z iteratorów i generatorów. Ponadto naucz si? tworzy? w?asne klasy i funkcje oraz sprawd?, jak uzyska? dost?p do plików i sieci. Te i dziesi?tki innych receptur opisano w tej ksi??ce. To obowi?zkowa pozycja na pó?ce ka?dego programisty pracuj?cego z j?zykiem Python.
Dzi?ki tej ksi??ce:
- poznasz podstawy j?zyka Python
- rozwi??esz w optymalny sposób najcz?stsze problemy
- napiszesz program korzystaj?cy z puli w?tków
- b?dziesz lepszym programist? Pythona!
Najlepsze rozwi?zania typowych problemów!
Table of contents
- Python. Receptury
- Przedmowa
-
1. Algorytmy i struktury danych
- 1.1. Wypakowywanie sekwencji do odrębnych zmiennych
- 1.2. Wypakowywanie elementów z obiektów iterowalnych o dowolnej długości
- 1.3. Zachowywanie ostatnich N elementów
- 1.4. Wyszukiwanie N największych lub najmniejszych elementów
- 1.5. Tworzenie kolejki priorytetowej
- 1.6. Odwzorowywanie kluczy na różne wartości ze słownika
- 1.7. Określanie uporządkowania w słownikach
- 1.8. Obliczenia na danych ze słowników
- 1.9. Wyszukiwanie identycznych danych w dwóch słownikach
- 1.10. Usuwanie powtórzeń z sekwencji przy zachowaniu kolejności elementów
- 1.11. Nazywanie wycinków
- 1.12. Określanie najczęściej występujących w sekwencji elementów
- 1.13. Sortowanie list słowników według wspólnych kluczy
- 1.14. Sortowanie obiektów bez wbudowanej obsługi porównań
- 1.15. Grupowanie rekordów na podstawie wartości pola
- 1.16. Filtrowanie elementów sekwencji
- 1.17. Pobieranie podzbioru słownika
- 1.18. Odwzorowywanie nazw na elementy sekwencji
- 1.19. Jednoczesne przekształcanie i redukowanie danych
- 1.20. Łączenie wielu odwzorowań w jedno
-
2. Łańcuchy znaków i tekst
- 2.1. Podział łańcuchów znaków po wykryciu dowolnego z różnych ograniczników
- 2.2. Dopasowywanie tekstu do początkowej lub końcowej części łańcucha znaków
- 2.3. Dopasowywanie łańcuchów znaków za pomocą symboli wieloznacznych powłoki
- 2.4. Dopasowywanie i wyszukiwanie wzorców tekstowych
- 2.5. Wyszukiwanie i zastępowanie tekstu
- 2.6. Wyszukiwanie i zastępowanie tekstu bez uwzględniania wielkości liter
- 2.7. Tworzenie wyrażeń regularnych w celu uzyskania najkrótszego dopasowania
- 2.8. Tworzenie wyrażeń regularnych dopasowywanych do wielowierszowych wzorców
- 2.9. Przekształcanie tekstu w formacie Unicode na postać standardową
- 2.10. Używanie znaków Unicode w wyrażeniach regularnych
- 2.11. Usuwanie niepożądanych znaków z łańcuchów
- 2.12. Zapewnianie poprawności i porządkowanie tekstu
- 2.13. Wyrównywanie łańcuchów znaków
- 2.14. Łączenie łańcuchów znaków
- 2.15. Podstawianie wartości za zmienne w łańcuchach znaków
- 2.16. Formatowanie tekstu w celu uzyskania określonej liczby kolumn
- 2.17. Obsługiwanie encji HTML-a i XML-a w tekście
- 2.18. Podział tekstu na tokeny
- 2.19. Tworzenie prostego rekurencyjnego parsera zstępującego
- 2.20. Przeprowadzanie operacji tekstowych na łańcuchach bajtów
-
3. Liczby, daty i czas
- 3.1. Zaokrąglanie liczb
- 3.2. Przeprowadzanie dokładnych obliczeń na liczbach dziesiętnych
- 3.3. Formatowanie liczb w celu ich wyświetlenia
- 3.4. Stosowanie dwójkowych, ósemkowych i szesnastkowych liczb całkowitych
- 3.5. Pakowanie do bajtów i wypakowywanie z bajtów dużych liczb całkowitych
- 3.6. Przeprowadzanie obliczeń na liczbach zespolonych
- 3.7. Nieskończoność i wartości NaN
- 3.8. Obliczenia z wykorzystaniem ułamków
- 3.9. Obliczenia z wykorzystaniem dużych tablic liczbowych
- 3.10. Przeprowadzanie operacji na macierzach i z zakresu algebry liniowej
- 3.11. Losowe pobieranie elementów
- 3.12. Przekształcanie dni na sekundy i inne podstawowe konwersje związane z czasem
- 3.13. Określanie daty ostatniego piątku
- 3.14. Określanie przedziału dat odpowiadającego bieżącemu miesiącowi
- 3.15. Przekształcanie łańcuchów znaków na obiekty typu datetime
- 3.16. Manipulowanie datami z uwzględnieniem stref czasowych
-
4. Iteratory i generatory
- 4.1. Ręczne korzystanie z iteratora
- 4.2. Delegowanie procesu iterowania
- 4.3. Tworzenie nowych wzorców iterowania z wykorzystaniem generatorów
- 4.4. Implementowanie protokołu iteratora
- 4.5. Iterowanie w odwrotnej kolejności
- 4.6. Definiowanie funkcji generatorów z dodatkowym stanem
- 4.7. Pobieranie wycinków danych zwracanych przez iterator
- 4.8. Pomijanie pierwszej części obiektu iterowalnego
- 4.9. Iterowanie po wszystkich możliwych kombinacjach lub permutacjach
- 4.10. Przechodzenie po parach indeks – wartość sekwencji
- 4.11. Jednoczesne przechodzenie po wielu sekwencjach
- 4.12. Przechodzenie po elementach z odrębnych kontenerów
- 4.13. Tworzenie potoków przetwarzania danych
- 4.14. Przekształcanie zagnieżdżonych sekwencji na postać jednowymiarową
- 4.15. Przechodzenie po scalonych posortowanych obiektach iterowalnych zgodnie z kolejnością sortowania
- 4.16. Zastępowanie nieskończonych pętli while iteratorem
-
5. Pliki i operacje wejścia-wyjścia
- 5.1. Odczyt i zapis danych tekstowych
- 5.2. Zapisywanie danych z funkcji print() do pliku
- 5.3. Stosowanie niestandardowych separatorów lub końca wiersza w funkcji print()
- 5.4. Odczyt i zapis danych binarnych
- 5.5. Zapis danych do pliku, który nie istnieje
- 5.6. Wykonywanie operacji wejścia-wyjścia na łańcuchach
- 5.7. Odczytywanie i zapisywanie skompresowanych plików z danymi
- 5.8. Przechodzenie po rekordach o stałej wielkości
- 5.9. Wczytywanie danych binarnych do zmiennego bufora
- 5.10. Odwzorowywanie plików binarnych w pamięci
- 5.11. Manipulowanie ścieżkami
- 5.12. Sprawdzanie, czy plik istnieje
- 5.13. Pobieranie listy zawartości katalogu
- 5.14. Nieuwzględnianie kodowania nazw plików
- 5.15. Wyświetlanie nieprawidłowych nazw plików
- 5.16. Dodawanie lub zmienianie kodowania otwartego pliku
- 5.17. Zapisywanie bajtów w pliku tekstowym
- 5.18. Umieszczanie deskryptora istniejącego pliku w obiekcie pliku
- 5.19. Tworzenie tymczasowych plików i katalogów
- 5.20. Komunikowanie z portami szeregowymi
- 5.21. Serializowanie obiektów Pythona
-
6. Kodowanie i przetwarzanie danych
- 6.1. Wczytywanie i zapisywanie danych CSV
- 6.2. Wczytywanie i zapisywanie danych w formacie JSON
- 6.3. Parsowanie prostych danych w XML-u
- 6.4. Stopniowe parsowanie bardzo dużych plików XML
- 6.5. Przekształcanie słowników na format XML
- 6.6. Parsowanie, modyfikowanie i ponowne zapisywanie dokumentów XML
- 6.7. Parsowanie dokumentów XML z przestrzeniami nazw
- 6.8. Komunikowanie się z relacyjnymi bazami danych
- 6.9. Dekodowanie i kodowanie cyfr w systemie szesnastkowym
- 6.10. Dekodowanie i kodowanie wartości w formacie Base64
- 6.11. Odczyt i zapis tablic binarnych zawierających struktury
- 6.12. Wczytywanie zagnieżdżonych struktur binarnych o zmiennej długości
- 6.13. Podsumowywanie danych i obliczanie statystyk
-
7. Funkcje
- 7.1. Pisanie funkcji przyjmujących dowolną liczbę argumentów
- 7.2. Tworzenie funkcji przyjmujących argumenty podawane wyłącznie za pomocą słów kluczowych
- 7.3. Dołączanie metadanych z informacjami do argumentów funkcji
- 7.4. Zwracanie wielu wartości przez funkcje
- 7.5. Definiowanie funkcji z argumentami domyślnymi
- 7.6. Definiowanie funkcji anonimowych (wewnątrzwierszowych)
- 7.7. Pobieranie wartości zmiennych w funkcjach anonimowych
- 7.8. Uruchamianie n-argumentowej jednostki wywoływalnej z mniejszą liczbą argumentów
- 7.9. Zastępowanie klas z jedną metodą funkcjami
- 7.10. Dodatkowy stan w funkcjach wywoływanych zwrotnie
- 7.11. Wewnątrzwierszowe zapisywanie wywoływanych zwrotnie funkcji
- 7.12. Dostęp do zmiennych zdefiniowanych w domknięciu
-
8. Klasy i obiekty
- 8.1. Modyfikowanie tekstowej reprezentacji obiektów
- 8.2. Modyfikowanie formatowania łańcuchów znaków
- 8.3. Dodawanie do obiektów obsługi protokołu zarządzania kontekstem
- 8.4. Zmniejszanie zużycia pamięci przy tworzeniu dużej liczby obiektów
- 8.5. Hermetyzowanie nazw w klasie
- 8.6. Tworzenie atrybutów zarządzanych
- 8.7. Wywoływanie metod klasy bazowej
- 8.8. Rozszerzanie właściwości w klasie pochodnej
- 8.9. Tworzenie nowego rodzaju atrybutów klasy lub egzemplarza
- 8.10. Stosowanie właściwości obliczanych w leniwy sposób
- 8.11. Upraszczanie procesu inicjowania struktur danych
- 8.12. Definiowanie interfejsu lub abstrakcyjnej klasy bazowej
- 8.13. Tworzenie modelu danych lub systemu typów
- 8.14. Tworzenie niestandardowych kontenerów
- 8.15. Delegowanie obsługi dostępu do atrybutów
- 8.16. Definiowanie więcej niż jednego konstruktora w klasie
- 8.17. Tworzenie obiektów bez wywoływania metody __init__()
- 8.18. Rozszerzanie klas za pomocą klas mieszanych
- 8.19. Implementowanie obiektów ze stanem lub maszyn stanowych
- 8.20. Wywoływanie metod obiektu na podstawie nazwy w łańcuchu znaków
- 8.21. Implementowanie wzorca odwiedzający
- 8.22. Implementowanie wzorca odwiedzający bez stosowania rekurencji
- 8.23. Zarządzanie pamięcią w cyklicznych strukturach danych
- 8.24. Tworzenie klas z obsługą porównań
- 8.25. Tworzenie obiektów zapisywanych w pamięci podręcznej
-
9. Metaprogramowanie
- 9.1. Tworzenie nakładek na funkcje
- 9.2. Zachowywanie metadanych funkcji przy pisaniu dekoratorów
- 9.3. Pobieranie pierwotnej funkcji z nakładki
- 9.4. Tworzenie dekoratorów przyjmujących argumenty
- 9.5. Definiowanie dekoratora z atrybutami dostosowywanymi przez użytkownika
- 9.6. Definiowanie dekoratorów przyjmujących opcjonalny argument
- 9.7. Wymuszanie sprawdzania typów w funkcji za pomocą dekoratora
- 9.8. Definiowanie dekoratorów jako elementów klasy
- 9.9. Definiowanie dekoratorów jako klas
- 9.10. Stosowanie dekoratorów do metod klasy i metod statycznych
- 9.11. Pisanie dekoratorów, które dodają argumenty do funkcji w nakładkach
- 9.12. Stosowanie dekoratorów do poprawiania definicji klas
- 9.13. Używanie metaklasy do kontrolowania tworzenia obiektów
- 9.14. Sprawdzanie kolejności definiowania atrybutów klasy
- 9.15. Definiowanie metaklas przyjmujących argumenty opcjonalne
- 9.16. Sprawdzanie sygnatury na podstawie argumentów *args i **kwargs
- 9.17. Wymuszanie przestrzegania konwencji pisania kodu w klasie
- 9.18. Programowe definiowanie klas
- 9.19. Inicjowanie składowych klasy w miejscu definicji klasy
- 9.20. Przeciążanie metod z wykorzystaniem uwag do funkcji
- 9.21. Unikanie powtarzających się metod właściwości
- 9.22. Definiowanie w łatwy sposób menedżerów kontekstu
- 9.23. Wykonywanie kodu powodującego lokalne efekty uboczne
- 9.24. Parsowanie i analizowanie kodu źródłowego Pythona
- 9.25. Dezasemblacja kodu bajtowego Pythona
-
10. Moduły i pakiety
- 10.1. Tworzenie hierarchicznych pakietów z modułami
- 10.2. Kontrolowanie importowania wszystkich symboli
- 10.3. Importowanie modułów podrzędnych z pakietu za pomocą nazw względnych
- 10.4. Podział modułu na kilka plików
- 10.5. Tworzenie odrębnych katalogów z importowanym kodem z jednej przestrzeni nazw
- 10.6. Ponowne wczytywanie modułów
- 10.7. Umożliwianie wykonywania kodu z katalogu lub pliku zip jako głównego skryptu
- 10.8. Wczytywanie pliku z danymi z pakietu
- 10.9. Dodawanie katalogów do zmiennej sys.path
- 10.10. Importowanie modułów na podstawie nazwy z łańcucha znaków
- 10.11. Wczytywanie modułów ze zdalnego komputera z wykorzystaniem haków w poleceniu importu
- 10.12. Modyfikowanie modułów w trakcie importowania
- 10.13. Instalowanie pakietów tylko na własny użytek
- 10.14. Tworzenie nowego środowiska Pythona
- 10.15. Rozpowszechnianie pakietów
-
11. Sieci i rozwijanie aplikacji sieciowych
- 11.1. Interakcja z usługami HTTP za pomocą kodu klienta
- 11.2. Tworzenie serwera TCP
- 11.3. Tworzenie serwera UDP
- 11.4. Generowanie przedziałów adresów IP na podstawie adresu CIDR
- 11.5. Tworzenie prostego interfejsu opartego na architekturze REST
- 11.6. Obsługa prostych zdalnych wywołań procedur za pomocą protokołu XML-RPC
- 11.7. Prosta komunikacja między interpreterami
- 11.8. Implementowanie zdalnych wywołań procedur
- 11.9. Proste uwierzytelnianie klientów
- 11.10. Dodawanie obsługi protokołu SSL do usług sieciowych
- 11.11. Przekazywanie deskryptora pliku gniazda między procesami
- 11.12. Operacje wejścia-wyjścia sterowane zdarzeniami
- 11.13. Wysyłanie i odbieranie dużych tablic
-
12. Współbieżność
- 12.1. Uruchamianie i zatrzymywanie wątków
- 12.2. Ustalanie, czy wątek rozpoczął pracę
- 12.3. Komunikowanie się między wątkami
- 12.4. Blokowanie sekcji krytycznej
- 12.5. Blokowanie z unikaniem zakleszczenia
- 12.6. Zapisywanie stanu wątku
- 12.7. Tworzenie puli wątków
- 12.8. Proste programowanie równoległe
- 12.9. Jak radzić sobie z mechanizmem GIL (i przestać się nim martwić)
- 12.10. Definiowanie zadań działających jak aktory
- 12.11. Przesyłanie komunikatów w modelu publikuj-subskrybuj
- 12.12. Używanie generatorów zamiast wątków
- 12.13. Odpytywanie wielu kolejek wątków
- 12.14. Uruchamianie procesu demona w systemie Unix
-
13. Skrypty narzędziowe i zarządzanie systemem
- 13.1. Przyjmowanie danych wejściowych skryptu za pomocą przekierowań, potoków lub plików wejściowych
- 13.2. Kończenie pracy programu wyświetleniem komunikatu o błędzie
- 13.3. Parsowanie opcji z wiersza poleceń
- 13.4. Prośba o podanie hasła w czasie wykonywania programu
- 13.5. Pobieranie rozmiarów terminala
- 13.6. Wywoływanie zewnętrznych poleceń i pobieranie danych wyjściowych
- 13.7. Kopiowanie lub przenoszenie plików i katalogów
- 13.8. Tworzenie i wypakowywanie archiwów
- 13.9. Wyszukiwanie plików na podstawie nazwy
- 13.10. Wczytywanie plików konfiguracyjnych
- 13.11. Dodawanie mechanizmu rejestrowania operacji do prostych skryptów
- 13.12. Dodawanie obsługi rejestrowania do bibliotek
- 13.13. Tworzenie stopera
- 13.14. Określanie limitów wykorzystania pamięci i procesora
- 13.15. Uruchamianie przeglądarki internetowej
-
14. Testowanie, debugowanie i wyjątki
- 14.1. Testowanie danych wyjściowych wysyłanych do strumienia stdout
- 14.2. Podstawianie obiektów w testach jednostkowych
- 14.3. Sprawdzanie wystąpienia wyjątków w testach jednostkowych
- 14.4. Zapisywanie danych wyjściowych testu w pliku
- 14.5. Pomijanie testów lub przewidywanie ich niepowodzenia
- 14.6. Obsługa wielu wyjątków
- 14.7. Przechwytywanie wszystkich wyjątków
- 14.8. Tworzenie niestandardowych wyjątków
- 14.9. Zgłaszanie wyjątku w odpowiedzi na wystąpienie innego wyjątku
- 14.10. Ponowne zgłaszanie ostatniego wyjątku
- 14.11. Wyświetlanie komunikatów ostrzegawczych
- 14.12. Debugowanie prostych awarii programu
- 14.13. Profilowanie i pomiar czasu pracy programów
- 14.14. Przyspieszanie działania programów
-
15. Rozszerzenia w języku C
- 15.1. Dostęp do kodu w języku C za pomocą modułu ctypes
- 15.2. Pisanie prostych modułów rozszerzeń w języku C
- 15.3. Pisanie funkcji rozszerzeń manipulujących tablicami
- 15.4. Zarządzanie nieprzejrzystymi wskaźnikami w modułach rozszerzeń w języku C
- 15.5. Definiowanie i eksportowanie interfejsów API języka C w modułach rozszerzeń
- 15.6. Wywoływanie kodu Pythona w kodzie w języku C
- 15.7. Zwalnianie blokady GIL w rozszerzeniach w języku C
- 15.8. Jednoczesne wykonywanie wątków z kodu w językach C i Python
- 15.9. Umieszczanie kodu w języku C w nakładkach opartych na narzędziu Swig
- 15.10. Używanie Cythona do tworzenia nakładek na istniejący kod w języku C
- 15.11. Używanie Cythona do pisania wydajnych operacji na tablicach
- 15.12. Przekształcanie wskaźnika do funkcji w jednostkę wywoływalną
- 15.13. Przekazywanie łańcuchów znaków zakończonych symbolem NULL do bibliotek języka C
- 15.14. Przekazywanie łańcuchów znaków Unicode do bibliotek języka C
- 15.15. Przekształcanie łańcuchów znaków z języka C na ich odpowiedniki z Pythona
- 15.16. Używanie łańcuchów znaków o nieznanym kodowaniu pobieranych z języka C
- 15.17. Przekazywanie nazw plików do rozszerzeń w języku C
- 15.18. Przekazywanie otwartych plików do rozszerzeń w języku C
- 15.19. Wczytywanie w języku C danych z obiektów podobnych do plików
- 15.20. Pobieranie obiektów iterowalnych w języku C
- 15.21. Diagnozowanie błędów segmentacji
- A. Dalsza lektura
- B. O autorach
- Indeks
- Kolofon
- Copyright
Product information
- Title: Python. Receptury. Wydanie III
- Author(s):
- Release date: January 2014
- Publisher(s): Helion
- ISBN: 9781492013532
You might also like
book
Python Rusz głową! Wydanie II
Python, prosty, wszechstronny i elastyczny język programowania, nadaje się zarówno do pisania niedużych skryptów, wielkich systemów, …
book
Python. Leksykon kieszonkowy. Wydanie V
Podr?czny przewodnik po j?zyku Python! J?zyk Python obecny jest na rynku od ponad 20 lat. Opracowany …
book
Praktyczne uczenie nienadzorowane przy użyciu języka Python
Jak budować użytkowe rozwiązania uczenia maszynowego na podstawie nieoznakowanych danych. Wielu ekspertów branżowych uważa uczenie nienadzorowane …
book
Python. Programuj szybko i wydajnie
;Python to skryptowy język programowania istniejący na rynku od wielu lat -- jego pierwsza wersja pojawiła …