Najlepsze praktyki w Pythonie

Najlepsze praktyki w Pythonie

Ten artykuł wyjaśnia najlepsze praktyki w Pythonie.

Wyjaśnimy najlepsze praktyki w Pythonie na konkretnych przykładach kodu, przedstawiając sposoby pisania czytelnego i łatwego w utrzymaniu kodu.

YouTube Video

Najlepsze praktyki w Pythonie

Uczyń czytelność najwyższym priorytetem

Najpierw przyjrzyjmy się 'stawianiu czytelności na pierwszym miejscu.'.

Python to język, który ceni 'czytelność'. Najpierw priorytetem powinno być pisanie kodu, którego zamiar jest od razu jasny.

1# Bad example: unclear variable names
2a = 10
3b = 5
4c = a * b

W tym kodzie nazwy zmiennych nie przekazują swojego znaczenia, więc innym zajmuje więcej czasu zrozumienie go później.

1# Good example: descriptive variable names
2price = 10
3quantity = 5
4total_cost = price * quantity

Nadając zmiennym konkretne nazwy, Twój kod sam w sobie staje się dokumentacją.

Pisz jawny kod

Następnie przyjrzyjmy się 'pisaniu jawnego kodu.'.

W Pythonie 'wyraźny zamiar' jest preferowany nad 'domyślne zachowanie.'.

1# Bad example: implicit truthy check
2if data:
3    process(data)

W tym kodzie nie wiadomo, czego oczekuje się od data, co sprzyja powstawaniu błędów.

1# Good example: explicit condition
2if len(data) > 0:
3    process(data)

Wyraźnie określając warunki, zamiar kodu odpowiada jego specyfikacji.

Utrzymuj funkcje małe i skupione na jednej odpowiedzialności

Teraz przyjrzyjmy się 'utrzymywaniu funkcji małych i skupionych na jednej odpowiedzialności.'.

Gdy jedna funkcja robi zbyt wiele rzeczy, testowanie i utrzymanie stają się trudne.

1# Bad example: doing too many things
2def handle_user(user):
3    save_to_database(user)
4    send_email(user)
5    write_log(user)

W tym kodzie procesy są ze sobą silnie powiązane, przez co ponowne użycie i modyfikacja są trudne.

1# Good example: single responsibility
2def save_user(user):
3    save_to_database(user)
4
5def notify_user(user):
6    send_email(user)
7
8def log_user(user):
9    write_log(user)

Rozdzielając funkcje, ich role stają się jasne, a testowanie łatwiejsze.

Aktywnie używaj wskazówek typów

Następnie przyjrzyjmy się 'aktywnemu stosowaniu wskazówek typów.'.

Wskazówki typów służą jako dokumentacja i są potężnym narzędziem do zapobiegania błędom.

1# Bad example: Without type hints
2def add(a, b):
3    return a + b

W tym kodzie typy argumentów i wartości zwracanych są niejasne, przez co łatwo o pomyłki.

1# Good example: With type hints
2def add(a: int, b: int) -> int:
3    return a + b

Dzięki wskazówkom typów autouzupełnianie IDE, analiza statyczna i czytelność bardzo się poprawiają.

Wyraźnie zaznacz możliwość zwrócenia None

Następnie przyjrzyjmy się 'wyraźnemu zaznaczeniu możliwości zwrócenia None.'.

Funkcje, które mogą zwracać None, są często pomijane przez tych, którzy z nich korzystają.

1# Bad example: Ambiguous return value
2def find_user(user_id):
3    if user_id == 1:
4        return {"id": 1, "name": "Alice"}
5    return None

W tym kodzie nie jest jasne, czy będzie zwracana jakaś wartość.

1# Good example: explicit return type
2from typing import Optional, Dict, Any
3
4def find_user(user_id: int) -> Optional[Dict[str, Any]]:
5    if user_id == 1:
6        return {"id": 1, "name": "Alice"}
7    return None

Używając Optional, możesz przekazać możliwość zwrócenia None jako typu.

Nie przechwytuj wyjątków zbyt ogólnie

Następnie przyjrzyjmy się 'nieprzechwytywaniu wyjątków zbyt szeroko.'.

Obsługa wyjątków powinna zasadniczo przechwytywać tylko to, co konieczne.

1# Bad example: catching all exceptions
2try:
3    result = int(value)
4except Exception:
5    result = 0

Ten kod może ukrywać błędy, które powinny były zostać zauważone.

1# Good example: catch specific exception
2try:
3    result = int(value)
4except ValueError:
5    result = 0

Ograniczając wyjątki, nie przeoczysz nieoczekiwanych problemów.

Bezpiecznie zarządzaj zasobami przy użyciu instrukcji with

Następnie przyjrzyjmy się 'bezpiecznemu zarządzaniu zasobami przy użyciu instrukcji with.'.

Zasoby, takie jak pliki czy blokady, muszą być zawsze rzetelnie zwalniane.

1# Bad example: manual close
2file = open("data.txt")
3content = file.read()
4file.close()

W tym kodzie, jeśli wystąpi wyjątek, close() może nie zostać wywołane.

1# Good example: using context manager
2with open("data.txt") as file:
3    content = file.read()

Używając instrukcji with, sprzątanie zostanie wykonane bezpiecznie nawet w przypadku wystąpienia wyjątku.

Stosuj list comprehensions odpowiednio

Następnie przyjrzyjmy się 'odpowiedniemu stosowaniu list comprehensions.'.

Proste procesy transformacyjne można zapisać zwięźle przy użyciu list comprehensions.

1# Bad example: Verbose loop
2squares = []
3for i in range(10):
4    squares.append(i * i)

W tym kodzie trudno dostrzec główny proces.

1# Good example: Clear list comprehension
2squares = [i * i for i in range(10)]

Dzięki odpowiedniemu stosowaniu list comprehensions poprawia się czytelność kodu.

Unikaj magicznych liczb

Następnie przyjrzyjmy się 'unikaniu magicznych liczb.'.

Bezpośrednie umieszczanie liczb i stringów zaciemnia ich znaczenie.

1# Bad example: magic number
2if status == 404:
3    handle_not_found()

W tym kodzie zakłada się, że znasz znaczenie 404.

1# Good example: named constant
2NOT_FOUND = 404
3
4if status == NOT_FOUND:
5    handle_not_found()

Nadanie nazw wyjaśnia intencje.

Pisz kod, który jest łatwy w utrzymaniu, a nie tylko 'działa'

Na koniec przyjrzyjmy się 'pisaniu kodu, który jest utrzymywalny, a nie tylko działa.'.

Ważne jest, czy Ty w przyszłości lub inni będą mogli to przeczytać.

1# Bad example: Hard to maintain
2def f(x):
3    return x * 1.08 + 100

W tym kodzie specyfikacji nie można zrozumieć z samego kodu.

1# Good example: Easy to maintain
2TAX_RATE = 1.08
3BASE_FEE = 100
4
5def calculate_total(price: float) -> float:
6    return price * TAX_RATE + BASE_FEE

Odwzorowując znaczenie w nazwach, kod sam staje się specyfikacją.

Podsumowanie

Najlepsze praktyki w Pythonie sprowadzają się do pisania kodu łatwego do zrozumienia, a nie popisowego. Budowanie drobnych nawyków prowadzi do kodu z mniejszą liczbą błędów, który może być używany przez długi czas.

Możesz śledzić ten artykuł, korzystając z Visual Studio Code na naszym kanale YouTube. Proszę również sprawdzić nasz kanał YouTube.

YouTube Video