Bedste praksis i Python
Denne artikel forklarer bedste praksis i Python.
Vi vil forklare bedste praksis i Python med faktiske kodeeksempler og introducere måder at skrive læsbar og vedligeholdelsesvenlig kode på.
YouTube Video
Bedste praksis i Python
Gør læsbarhed til den højeste prioritet
Lad os først se på 'at gøre læsbarhed til den højeste prioritet.'.
Python er et sprog, der vægter 'læsbarhed'. Prioriter først at skrive kode, hvis hensigt er tydelig ved første øjekast.
1# Bad example: unclear variable names
2a = 10
3b = 5
4c = a * bI denne kode formidler variabelnavnene ikke deres betydning, så det tager tid for andre at forstå det senere.
1# Good example: descriptive variable names
2price = 10
3quantity = 5
4total_cost = price * quantityVed at gøre variabelnavne specifikke fungerer din kode i sig selv som dokumentation.
Skriv eksplicit kode
Lad os derefter se på 'at skrive eksplicit kode.'.
I Python foretrækkes 'eksplicit hensigt' frem for 'implicit opførsel'.
1# Bad example: implicit truthy check
2if data:
3 process(data)I denne kode er det uklart, hvad der forventes af data, hvilket skaber grobund for fejl.
1# Good example: explicit condition
2if len(data) > 0:
3 process(data)Ved at gøre betingelser eksplicitte stemmer kodens hensigt overens med dens specifikation.
Hold funktioner små og fokuseret på et enkelt ansvar
Lad os nu se på 'at holde funktioner små og fokuseret på et enkelt ansvar.'.
Når én funktion gør for mange ting, bliver test og vedligeholdelse vanskeligt.
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 kode bliver processerne tæt koblet sammen, hvilket gør genbrug og ændringer vanskeligere.
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 at opdele funktioner bliver deres roller tydelige og testning lettere.
Brug type hints aktivt
Lad os nu se på 'at bruge type hints aktivt.'.
Type hints fungerer som dokumentation og er et stærkt værktøj til at forhindre fejl.
1# Bad example: Without type hints
2def add(a, b):
3 return a + bI denne kode er typerne af argumenter og returværdier uklare, hvilket gør fejlbrug sandsynligt.
1# Good example: With type hints
2def add(a: int, b: int) -> int:
3 return a + bMed type hints forbedres IDE-autofuldførelse, statisk analyse og læsbarhed betydeligt.
Angiv eksplicit muligheden for at returnere None
Nu ser vi på 'eksplicit at angive muligheden for at returnere None.'.
Funktioner, der kan returnere None, bliver ofte overset af dem, der bruger 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 NoneI denne kode er det uklart, om der vil være en returværdi.
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 NoneVed at bruge Optional kan du udtrykke muligheden for at returnere None som en type.
Grib ikke undtagelser for bredt
Lad os derefter se på 'ikke at gribe undtagelser for bredt.'.
Undtagelseshåndtering skal grundlæggende kun fange det, der er nødvendigt.
1# Bad example: catching all exceptions
2try:
3 result = int(value)
4except Exception:
5 result = 0Denne kode kan skjule fejl, der burde være blevet opdaget.
1# Good example: catch specific exception
2try:
3 result = int(value)
4except ValueError:
5 result = 0Ved at begrænse undtagelser overser du ikke uventede problemer.
Håndter ressourcer sikkert med with-sætningen
Lad os nu se på 'at håndtere ressourcer sikkert med with-sætningen.'.
Ressourcer som filer og låse skal altid frigives pålideligt.
1# Bad example: manual close
2file = open("data.txt")
3content = file.read()
4file.close()I denne kode kan close() muligvis ikke blive kaldt, hvis der opstår en undtagelse.
1# Good example: using context manager
2with open("data.txt") as file:
3 content = file.read()Ved at bruge en with-sætning udføres oprydning sikkert, selv hvis der opstår en undtagelse.
Brug listeforståelser (list comprehensions) passende
Lad os nu se på 'at bruge listeforståelser passende.'.
Enkle transformationsprocesser kan skrives kortfattet med listeforståelser.
1# Bad example: Verbose loop
2squares = []
3for i in range(10):
4 squares.append(i * i)I denne kode er kerneprocessen svær at få øje på.
1# Good example: Clear list comprehension
2squares = [i * i for i in range(10)]Ved at bruge listeforståelser passende forbedres kodens læsbarhed.
Undgå magiske tal
Lad os nu se på 'at undgå magiske tal.'.
At skrive tal og strenge direkte gør deres betydning uklar.
1# Bad example: magic number
2if status == 404:
3 handle_not_found()I denne kode antages det, at du kender betydningen af 404.
1# Good example: named constant
2NOT_FOUND = 404
3
4if status == NOT_FOUND:
5 handle_not_found()At give navne gør hensigter tydelige.
Skriv kode, der er vedligeholdelsesvenlig, ikke kun kode, der 'virker'
Til sidst ser vi på 'at skrive kode, der er vedligeholdelsesvenlig, ikke kun kode, der virker.'.
Det vigtige er, om dit fremtidige jeg eller andre kan læse det.
1# Bad example: Hard to maintain
2def f(x):
3 return x * 1.08 + 100I denne kode kan specifikationen ikke forstås ud 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_FEEVed at afspejle betydning i navne bliver koden selv til specifikationen.
Sammendrag
Bedste praksis i Python handler om at skrive kode, der er let at forstå, fremfor smart kode. At opbygge små gode vaner fører til kode med færre fejl, som kan bruges i lang tid.
Du kan følge med i ovenstående artikel ved hjælp af Visual Studio Code på vores YouTube-kanal. Husk også at tjekke YouTube-kanalen.