Beste praksis i Python

Beste praksis i Python

Denne artikkelen forklarer beste praksis i Python.

Vi vil forklare beste praksis i Python med faktiske kodeeksempler og introdusere måter å skrive lesbar og vedlikeholdbar kode på.

YouTube Video

Beste praksis i Python

Sett lesbarhet som høyeste prioritet

Først skal vi se på «å gjøre lesbarhet til høyeste prioritet».

Python er et språk som verdsetter «lesbarhet». Prioriter først å skrive kode hvor hensikten er tydelig ved første øyekast.

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

I denne koden formidler ikke variabelnavnene meningen, så det tar tid for andre å forstå den senere.

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

Ved å gjøre variabelnavnene spesifikke, fungerer koden din selv som dokumentasjon.

Skriv eksplisitt kode

Neste skal vi se på «å skrive eksplisitt kode».

I Python foretrekkes «eksplisitt hensikt» fremfor «implisitt oppførsel».

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

I denne koden er det uklart hva som forventes av data, noe som gir grobunn for feil.

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

Ved å gjøre betingelsene eksplisitte, samsvarer kodens hensikt med spesifikasjonen.

Hold funksjoner små og fokuserte på ett ansvar

Neste skal vi se på «å holde funksjoner små og med tydelig ansvar».

Når én funksjon gjør for mange ting, blir testing og vedlikehold vanskelig.

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

I denne koden blir prosessene tett koblet sammen, noe som gjør gjenbruk og modifikasjon vanskelig.

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)

Ved å dele opp funksjoner blir rollene tydelige og testing lettere.

Bruk typehint aktivt

Neste skal vi se på «å bruke typehint aktivt».

Typehint fungerer som dokumentasjon og er et kraftig verktøy for å forhindre feil.

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

I denne koden er argument- og returtyper uklare, noe som kan føre til feil bruk.

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

Med typehint forbedres IDE-fullføring, statisk analyse og lesbarhet betraktelig.

Angi eksplisitt muligheten for å returnere None

Neste skal vi se på «å eksplisitt angi muligheten for å returnere None».

Funksjoner som kan returnere None blir ofte oversett av de som bruker dem.

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

I denne koden er det uklart om det vil være en returverdi.

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

Ved å bruke Optional kan du formidle muligheten for å returnere None som en type.

Ikke fang unntak for bredt

Neste skal vi se på «å ikke fange unntak for bredt».

Unntakshåndtering bør i utgangspunktet bare fange det som er nødvendig.

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

Denne koden kan skjule feil som burde vært oppdaget.

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

Ved å begrense unntakene, vil du ikke overse uventede problemer.

Håndter ressurser trygt med with-setningen

Neste skal vi se på «å håndtere ressurser trygt med with-setningen».

Ressurser som filer og låser må alltid frigjøres pålitelig.

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

I denne koden kan det hende at close() ikke kalles hvis et unntak oppstår.

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

Ved å bruke en with-setning, utføres opprydding trygt selv om et unntak oppstår.

Bruk listeforståelser hensiktsmessig

Neste skal vi se på «å bruke listeforståelser hensiktsmessig».

Enkle transformasjoner kan skrives kortfattet ved bruk av listeforståelser.

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

I denne koden er kjernekoden vanskelig å se.

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

Ved å bruke listeforståelser hensiktsmessig forbedres kodens lesbarhet.

Unngå magiske tall

Neste skal vi se på «å unngå magiske tall».

Å skrive tall og strenger direkte gjør betydningen uklar.

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

I denne koden antas det at du vet betydningen av 404.

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

Å gi navn gjør hensikten tydelig.

Skriv kode som er vedlikeholdbar, ikke bare kode som 'fungerer'

Til slutt skal vi se på «å skrive kode som er vedlikeholdbar, ikke bare kode som fungerer».

Det viktige er om ditt fremtidige jeg eller andre kan lese det.

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

I denne koden kan ikke spesifikasjonen forstås ut fra koden.

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

Ved å reflektere betydning i navnene, blir selve koden spesifikasjonen.

Sammendrag

Beste praksis i Python handler om å skrive kode som er lett å forstå, ikke bare smart kode. Å bygge gode vaner gir kode med færre feil som kan brukes over lang tid.

Du kan følge med på artikkelen ovenfor ved å bruke Visual Studio Code på vår YouTube-kanal. Vennligst sjekk ut YouTube-kanalen.

YouTube Video