Programistów Pythona ograniczają tylko wyobraźnia i technologia. Nic dziwnego, że rzesza osób zafascynowanych Pythonem stale rośnie, podobnie jak liczba adeptów programowania w tym języku. Po ugruntowaniu podstaw tworzenia kodu można już pisać całkiem funkcjonalne aplikacje, jednak prawdziwa moc Pythona i satysfakcja z pracy z nim objawiają się dopiero po opanowaniu nieco bardziej złożonych zagadnień. Jeśli więc znasz podstawową składnię i najważniejsze zasady rządzące Pythonem, czas na naukę pisania czystego, czytelnego i łatwego do utrzymania kodu – kodu pythonicznego!
Dzięki tej książce przyswoisz najlepsze zasady konfigurowania środowiska programistycznego i praktyki programistyczne poprawiające czytelność kodu. Znajdziesz tu mnóstwo przydatnych wskazówek dotyczących posługiwania się wierszem polecenia i takimi narzędziami jak formatery kodu, kontrolery typów, lintery, a nawet systemy kontroli wersji. Od strony praktycznej poznasz techniki organizacji kodu i tworzenia jego dokumentacji. Nie brak też zaawansowanych zagadnień, jak pomiary wydajności kodu czy analiza algorytmów Big O. Sporo miejsca poświęcono również pythonicznemu paradygmatowi programowania zorientowanego obiektowo. Dowiesz się więc, jak prawidłowo pisać klasy, korzystać z mechanizmów dziedziczenia i czym są metody dunder. To znakomity przewodnik na drodze, którą musi pokonać początkujący, aby stać się profesjonalnym programistą Pythona.
W książce między innymi:
- czym jest dobry styl programowania
- automatyczne formatowanie kodu w Pythonie
- typowe źródła błędów i ich wykrywanie
- organizacja plików kodu w projektach
- programowanie funkcyjne w Pythonie
- profilowanie wydajności kodu
- SPIS TREŚCI
-
- O autorze
- O recenzencie technicznym
- Podziękowania
- Wprowadzenie
- Kto powinien przeczytać tę książkę i dlaczego
- O tej książce
- Twoja podróż programistyczna
- Część I. Pierwsze kroki
- 1. Obsługa błędów i poszukiwanie pomocy
- Komunikaty o błędach w Pythonie
- Analiza śladu
- Wyszukiwanie informacji na temat komunikatów o błędach
- Zapobieganie błędom dzięki wykorzystaniu linterów
- Jak prosić o pomoc w programowaniu?
- Ogranicz konieczność dopowiadania od razu podaj jak najwięcej informacji
- Sformułuj swój problem w postaci rzeczywistego pytania
- Zadawaj pytania na właściwej stronie internetowej
- Podsumuj swoje pytanie w nagłówku
- Wyjaśnij, co ma robić Twój kod
- Dołącz kompletny komunikat o błędzie
- Udostępnij swój pełny kod
- Zastosuj odpowiednie formatowanie, aby poprawić czytelność kodu
- Powiedz osobom pomagającym, czego już próbowałeś
- Opisz swoją konfigurację
- Przykłady pytań
- Podsumowanie
- Komunikaty o błędach w Pythonie
- 2. Konfiguracja środowiska i wiersz polecenia
- System plików
- Ścieżki w Pythonie
- Katalog domowy
- Bieżący katalog roboczy
- Ścieżki względne i bezwzględne
- Programy i procesy
- Wiersz poleceń
- Otwieranie okna terminala
- Uruchamianie programów z wiersza poleceń
- Korzystanie z argumentów wiersza poleceń
- Uruchamianie kodu Pythona z wiersza poleceń z wykorzystaniem argumentu -c
- Uruchamianie programów w Pythonie z wiersza poleceń
- Uruchamianie programu py.exe
- Uruchamianie poleceń systemu operacyjnego z programu Pythona
- Minimalizacja wpisywania dzięki mechanizmowi uzupełniania z wykorzystaniem klawisza Tab
- Wyświetlanie historii poleceń
- Korzystanie z popularnych poleceń
- Dopasowywanie folderów i nazw plików do symboli wieloznacznych
- Zmiana katalogów za pomocą polecenia cd
- Wyświetlanie zawartości folderu za pomocą poleceń dir i ls
- Wyświetlanie zawartości podfolderów za pomocą poleceń dir /s i find
- Kopiowanie plików i folderów za pomocą poleceń copy i cp
- Przenoszenie plików i folderów za pomocą poleceń move i mv
- Zmienianie nazw plików i folderów za pomocą poleceń ren i mv
- Usuwanie plików i folderów za pomocą poleceń del i rm
- Tworzenie folderów za pomocą poleceń md i mkdir
- Usuwanie folderów za pomocą poleceń rd i rmdir
- Wyszukiwanie programów za pomocą poleceń where i which
- Czyszczenie terminala za pomocą poleceń cls i clear
- Zmienne środowiskowe i PATH
- Wyświetlanie wartości zmiennych środowiskowych
- Korzystanie ze zmiennej środowiskowej PATH
- Zmiana zawartości zmiennej środowiskowej PATH dla wiersza polecenia
- Trwałe dodawanie folderów do zmiennej PATH w systemie Windows
- Trwałe dodawanie folderów do zmiennej PATH w systemach macOS i Linux
- Uruchamianie programów Pythona bez wiersza poleceń
- Uruchamianie programów Pythona w systemie Windows
- Uruchamianie programów Pythona w systemie macOS
- Uruchamianie programów Pythona w systemie Ubuntu Linux
- Podsumowanie
- System plików
- Część II. Najlepsze praktyki, narzędzia i techniki
- 3. Formatowanie kodu za pomocą narzędzia Black
- Jak stracić przyjaciół i zrobić sobie wrogów wśród współpracowników?
- Przewodniki stylu i PEP 8
- Odstępy w poziomie
- Używaj jako wcięć znaków spacji
- Odstępy w obrębie wiersza
- Umieść jedną spację pomiędzy operatorami a identyfikatorami
- Nie wstawiaj spacji przed separatorami i wstaw pojedynczą spację po separatorach
- Nie umieszczaj spacji przed kropkami ani po nich
- Nie umieszczaj spacji po nazwie funkcji, metody lub kontenera
- Nie umieszczaj spacji za otwierającymi nawiasami kwadratowymi lub przed nawiasami zamykającymi
- Umieść dwie spacje przed komentarzami kończącymi wiersz
- Odstępy w pionie
- Przykład zastosowania odstępów w pionie
- Najlepsze praktyki dotyczące odstępów w pionie
- Black: bezkompromisowy formater kodu
- Instalacja narzędzia Black
- Uruchamianie narzędzia Black z wiersza polecenia
- Dostosowywanie ustawienia długości wiersza
- Wyłączenie ujmowania ciągów znaków w cudzysłów
- Podgląd zmian, które ma zamiar wprowadzić Black
- Wyłączenie programu Black dla części Twojego kodu
- Podsumowanie
- 4. Wybieranie zrozumiałych nazw
- Style wielkości liter
- Konwencje nazewnictwa PEP 8
- Odpowiednia długość nazw
- Zbyt krótkie nazwy
- Zbyt długie nazwy
- Prefiksy w nazwach
- Sekwencyjne przyrostki liczbowe w nazwach
- Korzystaj z nazw ułatwiających wyszukiwanie
- Unikaj dowcipów, kalamburów i określeń żargonowych
- Nie nadpisuj wbudowanych nazw
- Najgorsze możliwe nazwy zmiennych
- Podsumowanie
- 5. Wyszukiwanie cuchnącego kodu
- Powielony kod
- Magiczne liczby
- Kod wykomentowany i martwy
- Debugowanie za pomocą komunikatów
- Zmienne z przyrostkami numerycznymi
- Klasy, które powinny być funkcjami lub modułami
- Listy składane wewnątrz list składanych
- Puste bloki except i niejasne komunikaty o błędach
- Mity związane z cuchnącym kodem
- Mit: funkcje powinny mieć tylko jedną instrukcję return na końcu
- Mit: funkcje powinny zawierać co najwyżej jedną instrukcję try
- Mit: argumenty-flagi są złe
- Mit: zmienne globalne są złe
- Mit: komentarze są niepotrzebne
- Podsumowanie
- 6. Pisanie pythonicznego kodu
- Zen Pythona
- Naucz się cenić znaczące wcięcia
- Częste przypadki niewłaściwego korzystania ze składni
- Używaj funkcji enumerate() zamiast range()
- Używaj instrukcji with zamiast open() i close()
- Do porównywania z None używaj is zamiast ==
- Formatowanie ciągów znaków
- Jeśli ciąg zawiera wiele lewych ukośników, używaj surowych ciągów znaków
- Formatowanie ciągów za pomocą f-stringów
- Tworzenie płytkich kopii list
- Pythoniczne sposoby korzystania ze słowników
- Używaj ze słownikami wywołań get() i setdefault()
- Użyj dla wartości domyślnych klasy collections.defaultdict
- Używaj słowników zamiast instrukcji switch
- Wyrażenia warunkowe: brzydki operator trójargumentowy Pythona
- Korzystanie z wartości zmiennych
- Operatory przypisania i operatory porównania
- Sprawdzanie, czy zmienna jest jedną z wielu wartości
- Podsumowanie
- 7. Programistyczny żargon
- Definicje
- Python język i Python interpreter
- Odśmiecanie
- Literały
- Słowa kluczowe
- Obiekty, wartości, egzemplarze i tożsamości
- Elementy
- Obiekty mutowalne i niemutowalne
- Indeksy, klucze i skróty
- Kontenery, sekwencje, mapowanie i typy zbiorów
- Metody dunder i metody magiczne
- Moduły i pakiety
- Obiekty wywoływalne i obiekty pierwszej klasy
- Często mylone terminy
- Instrukcje a wyrażenia
- Blok, klauzula i ciało
- Zmienna a atrybut
- Funkcja a metoda
- Obiekt iterowalny a iterator
- Błędy składniowe, błędy wykonania a błędy semantyczne
- Parametry a argumenty
- Koercja typu a rzutowanie typu
- Właściwości a atrybuty
- Kod bajtowy a kod maszynowy
- Skrypt a program, język skryptowy a język programowania
- Biblioteka, framework, SDK, silnik i API
- Podsumowanie
- Dalsza lektura
- Definicje
- 8. Znane pułapki Pythona
- Nie dodawaj ani nie usuwaj elementów z listy, kiedy po niej iterujesz
- Nie kopiuj mutowalnych wartości inaczej niż poprzez wywołania copy.copy() lub copy.deepcopy()
- Nie używaj wartości mutowalnych w roli argumentów domyślnych
- Nie buduj ciągów za pomocą konkatenacji
- Nie oczekuj, że funkcja sort() posortuje listę alfabetycznie
- Nie zakładaj, że liczby zmiennoprzecinkowe są idealnie dokładne
- Nie twórz łańcucha operatorów nierówności !=
- Nie zapominaj o przecinku w krotce złożonej z jednego elementu
- Podsumowanie
- 9. Ezoteryczne osobliwości Pythona
- Dlaczego 256 to jest 256, ale 257 to nie jest 257
- Internowanie ciągów
- Sztuczne operatory inkrementacji i dekrementacji w Pythonie
- Wszystko z nic
- Wartości logiczne są liczbami całkowitymi
- Tworzenie łańcucha operatorów różnego rodzaju
- Antygrawitacja w Pythonie
- Podsumowanie
- 10. Pisanie skutecznych funkcji
- Nazwy funkcji
- Kompromisy dotyczące rozmiaru funkcji
- Parametry i argumenty funkcji
- Argumenty domyślne
- Korzystanie z * i ** w celu przekazywania argumentów do funkcji
- Użycie * do tworzenia funkcji wariadycznych
- Tworzenie funkcji wariadycznych za pomocą składni **
- Tworzenie funkcji-wrapperów za pomocą składni * i **
- Programowanie funkcyjne
- Skutki uboczne
- Funkcje wyższego rzędu
- Funkcje lambda
- Mapowanie i filtrowanie z wykorzystaniem list składanych
- Zwracane wartości zawsze powinny mieć ten sam typ danych
- Zgłaszanie wyjątków a zwracanie kodów błędów
- Podsumowanie
- 11. Komentarze, docstringi i wskazówki typu
- Komentarze
- Styl komentarzy
- Komentarze inline
- Komentarze wyjaśniające
- Komentarze podsumowujące
- Komentarze typu wyciągnięte wnioski
- Komentarze prawne
- Profesjonalny ton
- Znaczniki kodu i komentarze TODO
- Magiczne komentarze i kodowanie plików źródłowych
- Docstringi
- Wskazówki typu
- Korzystanie z narzędzi do statycznej analizy kodu
- Instalowanie i uruchamianie programu Mypy
- Wskazywanie kodu, który ma być ignorowany przez Mypy
- Ustawianie wskazówek dla wielu typów
- Ustawianie wskazówek typu dla list, słowników i nie tylko
- Korzystanie z narzędzi do statycznej analizy kodu
- Backport wskazówek typu z wykorzystaniem komentarzy
- Podsumowanie
- Komentarze
- 12. Organizowanie projektów kodu z wykorzystaniem systemu Git
- Commity i repozytoria systemu Git
- Korzystanie z narzędzia Cookiecutter do tworzenia nowych projektów w Pythonie
- Instalacja Gita
- Konfigurowanie nazwy użytkownika Gita i adresu e-mail
- Instalacja narzędzi GUI dla Gita
- Przepływ pracy w systemie Git
- W jaki sposób Git śledzi stan pliku?
- Po co jest stan staged?
- Tworzenie repozytorium Gita na komputerze lokalnym
- Dodawanie plików do śledzenia przez Gita
- Ignorowanie plików w repozytorium
- Zatwierdzanie zmian
- Używanie polecenia git diff do wyświetlania zmian przed zatwierdzeniem
- Wykorzystanie narzędzia git difftool do wyświetlania zmian za pomocą aplikacji GUI
- Jak często należy zatwierdzać zmiany?
- Usuwanie plików z repozytorium
- Zmiana nazwy i przenoszenie plików w repozytorium
- Przeglądanie loga commitów
- Przywracanie wcześniejszych zmian
- Cofanie niezatwierdzonych lokalnych zmian
- Anulowanie stanu staged pliku
- Cofanie najnowszych commitów
- Cofanie zmian do określonego commita dla pojedynczego pliku
- Przepisywanie historii commitów
- GitHub i polecenie git push
- Przesyłanie istniejącego repozytorium do usługi GitHub
- Klonowanie repozytorium z istniejącego repozytorium w serwisie GitHub
- Podsumowanie
- 13. Mierzenie wydajności algorytmów i analiza Big O
- Moduł timeit
- Profiler cProfile
- Analiza algorytmów Big O
- Rzędy w notacji Big O
- Metafora regału dla rzędów notacji Big O
- O(1), stały czas wykonywania
- O(log n), logarytmiczny czas wykonywania
- O(n), liniowy czas wykonywania
- O(n log n), N-Log-N
- O(n2), czas wielomianowy
- O(2n), czas wykładniczy
- O(n!), wzrost czasu w tempie n silnia
- Notacja Big O mierzy najgorszy scenariusz
- Metafora regału dla rzędów notacji Big O
- Określanie rzędu Big O kodu
- Dlaczego niższe rzędy i współczynniki nie mają znaczenia?
- Przykłady analizy Big O
- Rzędy Big O popularnych wywołań
- Analiza Big O w mgnieniu oka
- Big O nie ma znaczenia dla małych n, czyli dla większości przypadków
- Podsumowanie
- 14. Praktyczne projekty
- Wieża Hanoi
- Wyjście
- Kod źródłowy
- Pisanie kodu
- Cztery w rzędzie
- Wyjście
- Kod źródłowy
- Pisanie kodu
- Podsumowanie
- Wieża Hanoi
- Część III. Python obiektowy
- 15. Klasy i programowanie obiektowe
- Analogia do rzeczywistego świata: wypełnianie formularza
- Tworzenie obiektów na podstawie klas
- Tworzenie prostej klasy: WizCoin
- Metody __init__() i self
- Atrybuty
- Atrybuty prywatne i metody prywatne
- Funkcja type() i atrybut __qualname__
- Przykłady kodu obiektowego i nieobiektowego: kółko i krzyżyk
- Projektowanie klas dla rzeczywistych aplikacji jest trudne
- Podsumowanie
- 16. Programowanie obiektowe i dziedziczenie
- Jak działa dziedziczenie
- Przesłanianie metod
- Funkcja super()
- Staraj się stosować kompozycję zamiast dziedziczenia
- Minusy dziedziczenia
- Funkcje isinstance() i issubclass()
- Metody klasy
- Atrybuty klasy
- Metody statyczne
- Kiedy używać metod i atrybutów klasy oraz metod statycznych w programach obiektowych?
- Terminologia obiektowa
- Hermetyzacja
- Polimorfizm
- Kiedy nie używać dziedziczenia?
- Dziedziczenie wielokrotne
- Kolejność rozpoznawania metod
- Podsumowanie
- Jak działa dziedziczenie
- 17. Pythoniczny paradygmat OOP: właściwości i metody dunder
- Właściwości
- Przekształcanie atrybutu we właściwość
- Używanie setterów do sprawdzania poprawności danych
- Właściwości tylko do odczytu
- Kiedy używać właściwości?
- Metody dunder w Pythonie
- Metody dunder reprezentacji tekstowych
- Liczbowe metody dunder
- Odbite numeryczne metody dunder
- Metody dunder rozszerzonego przypisania w miejscu
- Metody dunder porównań
- Podsumowanie
- Właściwości
Opinie
Na razie nie ma opinii o produkcie.