50% off DataCamp Premium. 700+ courses, half price. Start learning today.
Coden is de kunst van het schrijven van instructies – ook wel algoritmes genoemd – voor een computer om een specifieke taak uit te voeren. Om met computers te communiceren gebruiken developers programmeertalen.
Net als natuurlijke talen, zoals Engels, Russisch of Quechua, bestaan programmeertalen uit een specifieke set syntactische en semantische regels die de basis vormen voor communicatie. Hoewel natuurlijke talen complexer, flexibeler en dynamischer zijn, zijn deze eigenschappen in beperktere mate ook van toepassing op programmeertalen.
Zelfs het eenvoudigste algoritme kun je op veel verschillende manieren schrijven. Hoewel wat flexibiliteit wenselijk is bij het ontwikkelen van code, kan dit de efficiëntie en effectieve communicatie ondermijnen, vooral wanneer meerdere mensen eraan werken.
Leesbaarheid is daarom een cruciaal aspect van code schrijven. Om ervoor te zorgen dat developers op één lijn zitten, hebben de meeste programmeertalen codestandaarden ontwikkeld. Deze documenten bieden richtlijnen en best practices voor het produceren van leesbare, onderhoudbare en schaalbare code.
In dit artikel ontdekken we de best practices voor coderen in Python, een van de populairste talen voor data science. De praktijken in de volgende secties zijn grotendeels gebaseerd op PEP 8, de standaardgids voor het schrijven van code in Python.
Bekijk ons artikel of onze Introductie tot Python-cursus om meer te leren over waar Python voor wordt gebruikt.
Wat is PEP 8?
“Code wordt veel vaker gelezen dan geschreven. Code moet altijd zo worden geschreven dat het de leesbaarheid bevordert” – Guido van Rossum, de bedenker van Python
PEP 8 is een stijlgids voor Python-code. Geschreven in 2001 door Guido van Rossum, Barry Warsaw en Nick Coghlan, biedt het een set aanbevelingen voor het schrijven van meer leesbare en consistente code. Het behandelt alles, van hoe je variabelen moet benoemen tot het maximale aantal tekens dat een regel mag hebben.
PEP staat voor Python Enhancement Proposal. Een PEP is een document dat nieuwe features beschrijft die voor Python worden voorgesteld en aspecten van Python documenteert, zoals design en stijl.
Hoewel niet verplicht, gebruikt een groot deel van de Python-community PEP 8. Het is dus sterk aan te raden om de richtlijnen te volgen. Door dat te doen, verbeter je je geloofsbrieven als professionele programmeur.
Ondanks de brede acceptatie van PEP 8, passen de richtlijnen niet in alle specifieke scenario's. In die gevallen definiëren bedrijven vaak hun eigen conventies.
Python-best practices
1. Python-best practices voor codekwaliteit
Leesbare en geordende code schrijven kan het verschil maken en je carrièremogelijkheden vergroten. Hoewel coderen voor beginners een mechanisch en complex proces kan lijken, is de waarheid dat coderen een kunst is.
Er zijn veel tips die je kunt volgen om de codekwaliteit in Python te verhogen. Hier is een lijst met enkele van de belangrijkste.
De tirannie van inspringing
Inspringing verwijst naar de spaties aan het begin van een codelijn. Terwijl inspringing in andere programmeertalen alleen een middel is voor leesbaarheid, is inspringing in Python verplicht. Python gebruikt inspringing om een codeblok te openen. Preciezer: 4 opeenvolgende spaties per inspringniveau, zoals in de volgende code:
for number in [1,2,3,4]:
if number % 2 == 0:
print(number)
else:
continue
Maximale regellengte
PEP 8 raadt aan dat geen enkele regel langer is dan 79 tekens. Dat is logisch, want kortere regels zijn makkelijker te lezen. Bovendien kun je met deze lengte meerdere bestanden naast elkaar open hebben.
Witte regels
Omring definities van functies en classes op topniveau met twee lege regels. Methodedefinities binnen een class worden omringd door één lege regel. Extra lege regels mogen (spaarzaam) worden gebruikt om groepen gerelateerde functies te scheiden. Gebruik tot slot in functies (spaarzaam) lege regels om logische secties aan te geven.
Gebruik linters en autoformatters
Meesterschap over code kost tijd. Op alle details letten tijdens het coderen kan uitdagend en tijdrovend zijn. Gelukkig kunnen machines, met name linters en formatters, ons helpen om de codekwaliteit te waarborgen.
Linters voeren statische analyse uit op broncode en controleren op semantische afwijkingen. Formatters zijn vergelijkbare tools die proberen je code te herstructureren qua spatiëring, regellengte, argumentpositionering, enzovoort, om ervoor te zorgen dat je code er consistent uitziet over verschillende bestanden of projecten. Python biedt je een scala aan linters en formatters om uit te kiezen.
Houd principes in gedachten
Hoewel sommige van de bovengenoemde regels eenvoudig zijn, draait coderen vaak om goede smaak en intuïtie. Om een codeerkunstenaar te worden, moet je enkele principes kennen die aan Python ten grondslag liggen. Een goed voorbeeld van zulke principes is de Zen van Python, behandeld in een apart artikel.
2. Best practices voor loggen in Python
Loggen is een manier om gebeurtenissen te volgen die plaatsvinden wanneer software draait. Vooral wanneer applicaties in omvang en complexiteit groeien, wordt loggen een cruciale techniek voor ontwikkelen, debuggen, draaien en performance bijhouden.
De logging-module maakt sinds versie 2.3 deel uit van de Python Standard Library om logging-praktijken te ondersteunen. Het is voor de meeste Python-developers het eerste aanspreekpunt voor loggen en wordt uitgebreid beschreven in PEP 282.
Loggen lijkt qua doel op een print-functie. Een print-functie mist echter veel informatie die nuttig kan zijn voor een developer. Logging kan daarentegen de tijdstippen en het regelnr. vastleggen waarop de fout optrad. Het kan ook fouten of andere informatie loggen naar bestanden, sockets, enz.
Om de module te importeren, hoef je alleen deze code uit te voeren:
import logging
Niet elk logbericht is hetzelfde. De module biedt namelijk categorieën van logniveaus op basis van de ernst van het bericht. Het gaat als volgt:
- NOTSET (0): Dit betekent dat alle berichten worden gelogd.
- Debug (10): Handig voor het diagnosticeren van problemen in de code.
- Info (20): Kan worden gebruikt om te bevestigen dat er geen bugs in de code zitten. Een goed gebruiksscenario voor info-level logging is het volgen van de voortgang van het trainen van een machinelearningmodel.
- Warning (30): Wijst op een probleem dat in de toekomst kan optreden. Bijvoorbeeld, een waarschuwing kan worden gegeven voor een module die in de toekomst mogelijk wordt stopgezet of een low-ram-waarschuwing.
- Error (40): Een ernstige bug in de code; dit kan een syntaxfout, out-of-memory-fout of exceptions zijn.
- Critical (50): Een fout waardoor het programma mogelijk stopt met functioneren of abrupt afsluit.
import logging
logging.info('This message is just informative')
logging.debug('My missions is to provide information about debugging.')
logging.critical("A Critical Logging Message")
Dat gezegd hebbende, hieronder staat een lijst met zes best practices voor het omgaan met logging in Python.
Gebruik logs in plaats van prints
We zeiden eerder dat logs informatie geven in dezelfde geest als print-functies. Logs zijn echter veel krachtiger en kunnen meer fijnmazige informatie bieden.
De Print-functie gebruiken kan verleidelijk zijn, vooral als je niet vertrouwd bent met loggingroutines, maar logs zullen altijd de veiligste optie zijn. Ze zijn beter geschikt om op te schalen en complexe applicaties aan te kunnen.
Het web staat vol met gidsen en documentatie. Deze DataCamp logging-tutorial is bijvoorbeeld precies wat je nodig hebt om te beginnen.
Gebruik de logging-module
Deze module is de go-to optie voor de meeste Python-developers. Dat betekent dat de module goed wordt onderhouden en wordt ondersteund door een enorme community die altijd een antwoord heeft op je vragen.
Kies het logniveau verstandig
De logging-module heeft zes verschillende niveaus van berichten. Elk daarvan is ontworpen voor een specifiek doel. Hoe beter je je eraan houdt, hoe makkelijker het voor jou en gebruikers zal zijn om te begrijpen wat er in je code gebeurt.
Gebruik tijdstempels bij het loggen
Dit is een cruciale eigenschap van logs die print-functies niet hebben. Naast weten waar een probleem verscheen, is het belangrijk om te weten wanneer het gebeurde. Tijdstempels zijn in dit soort situaties je grootste bondgenoten. Zorg ervoor dat je het standaardformaat gebruikt om tijdstempels te schrijven, dus het ISO-8601-formaat.
Maak de logbak leeg
Gebruik RotatingFileHandler-classes, zoals de TimedRotatingFileHandler, in plaats van FileHandler, om oude logbestanden te archiveren, comprimeren of verwijderen en zo problemen met geheugenruimte te voorkomen. Deze classes maken ruimte vrij zodra een grootte- of tijdsconditie wordt bereikt.
3. Best practices voor commentaar in Python
Commentaar is erg belangrijk om aantekeningen te maken voor toekomstige lezers van onze code. Hoewel het moeilijk is om precies te definiëren hoe code van commentaar moet worden voorzien, zijn er bepaalde richtlijnen die we kunnen volgen:
- Elk commentaar dat de code tegenspreekt is erger dan geen commentaar. Daarom is het erg belangrijk om de code en de commentaren bij te werken om inconsistenties te voorkomen.
- Commentaar moet volledige zinnen zijn, met de eerste letter met een hoofdletter.
- Probeer commentaar in het Engels te schrijven. Hoewel iedereen vrij is om commentaar te schrijven in de taal die hij of zij geschikt acht, is het aan te raden dit in het Engels te doen.
- Zorg ervoor dat je commentaar helder is en gemakkelijk te begrijpen voor andere sprekers van de taal waarin je schrijft.
Er zijn twee soorten commentaar: blokcommentaar en inline commentaar.
Blokcommentaar legt de code uit die erop volgt. Doorgaans laat je blokcommentaar op hetzelfde niveau inspringen als het codeblok. Elke regel van een blokcommentaar begint met een # en een enkele spatie, als volgt:
# This is a block comment
print('Welcome to DataCamp!")
Inline commentaar staat daarentegen op hetzelfde niveau als de code. Inline commentaar moet door minstens twee spaties van de statement worden gescheiden. Net als bij blokcommentaar begint inline commentaar met een enkel hekje (#) gevolgd door een spatie en een tekststring.
print ("Have you ever tried Python?") # This is an inline comment
4. Best practices voor docstrings in Python
Een docstring is een string literal die voorkomt als de eerste statement in een module-, functie-, class- of methodedefinitie. Meestal gebruik je een documentatiestring om de codedocumentatie automatisch te genereren. Een docstring kan daarom tijdens runtime worden benaderd via het speciale attribuut obj.__doc__ van dat object.
Voor consistentie worden docstrings altijd tussen drie dubbele aanhalingstekens (""") geplaatst.
Er zijn twee vormen van docstrings: one-liners en multi-line docstrings. One-liners zijn voor echt voor de hand liggende gevallen. Ze moeten echt op één regel passen. Het volgende voorbeeld illustreert een one-line docstring in de functie multiply():
def multiply(x, y):
""" Return the product of two numbers """
result = x * y
return result
Een multi-line docstring kan daarentegen meerdere regels beslaan. Zo'n docstring moet de functie van het script, de commandoregel-syntaxis, omgevingsvariabelen en bestanden documenteren. Gebruiksboodschappen kunnen behoorlijk uitgebreid zijn en moeten voldoende zijn voor een nieuwe gebruiker om het commando correct te gebruiken.
def calculate_salary(hours, price=20):
""" Return the salary according to the hours worked
Arguments:
hours: total hours investe
price: price of each hours worked. Minimum price is 20 dollars
"""
salary = hours * price
return salary
Een meer gedetailleerde uitleg van docstrings is te vinden in PEP257.
5. Best practices voor documentatie in Python
Hoewel commentaar belangrijk is om andere developers met wie je samenwerkt je code te laten begrijpen, is documentatie bedoeld om een community van potentiële gebruikers te helpen je software te leren gebruiken. Dit is een cruciale stap: hoe goed je software ook is, als de documentatie niet goed genoeg is, of nog erger, ontbreekt, zullen mensen het niet gebruiken.
Een README-bestand opnemen is altijd een goede gewoonte, vooral als je aan een nieuw project werkt. Deze bestanden zijn normaal gesproken het belangrijkste startpunt voor lezers van je code en bevatten algemene informatie voor zowel gebruikers als maintainers van het project.
Hoewel beknopt, moet het README-bestand het doel van het project uitleggen, de URL van de belangrijkste bron van de software en creditinformatie.
Evenzo moet je altijd een setup.py-bestand opnemen, waarmee je ervoor zorgt dat de software of bibliotheek is verpakt en gedistribueerd met Distulils, de standaard voor het distribueren van Python-modules.
Bovendien, als je software andere dependencies of packages nodig heeft om te draaien, moet je een requirements.txt-bestand opnemen dat de benodigde dependencies en hun versies beschrijft.
Tot slot ben je vrij om alle andere informatie toe te voegen die je relevant acht voor potentiële gebruikers. Het is bijvoorbeeld een goede gewoonte om voorbeelden te geven van hoe je package of functies werken.
6. Best practices voor virtuele omgevingen in Python
Om orde en consistentie in je dataprojecten te waarborgen, is het een goede gewoonte om voor elk project dat je start een virtuele omgeving aan te maken.
Virtuele omgevingen, ook wel virtualenvs genoemd, helpen versies van Python en de bibliotheken die je project nodig heeft en hun gerelateerde pip-versies los te koppelen en te isoleren. Dit stelt eindgebruikers in staat om hun eigen set software en versies te installeren en beheren, onafhankelijk van wat door het systeem wordt geleverd.
Om virtualenvs te maken, moeten we eerst het vereiste package installeren door de volgende regel code in je terminal te schrijven:
pip install virtualenv
Om een nieuwe virtualenv te creëren, doet de volgende code de magie. We noemen de nieuwe virtualenv “new_venv”
python3 -m venv /path/to/new/virtual/environment/new_venv
Naamgevingsconventies in Python
Een van de meest voorkomende fouten bij beginnende Python-developers is het onjuist benoemen van variabelen, classes, functies, enzovoort. Naamgevingsconventies zijn cruciale elementen om de leesbaarheid van code te waarborgen.
PEP 8 legt de standaardmanier uit om objecten in Python te benoemen. Volgens de richtlijnen moeten nieuwe modules en packages (inclusief frameworks van derden) volgens deze standaarden worden geschreven, maar interne consistentie heeft de voorkeur wanneer een bestaande bibliotheek een andere stijl heeft.
Je moet namen vermijden die te algemeen of te alledaags zijn. Ook moeten identifiers die in de standaardbibliotheek worden gebruikt ASCII-compatibel zijn, zoals beschreven in PEP 3131.
# Bad naming:
data_structure, ríos_españa, dictionary_with_countries_and_capitals
# Good naming:
user_profile, stop_words, global_emissions_df
Hieronder staat een lijst met de naamgevingsconventies voor de meest voorkomende objecten in Python.
- Packages en modules
- Package- en modulenaam moeten volledig lowercase zijn
- Underscores mogen alleen worden gebruikt in de package- en modulenaam als dit de leesbaarheid verbetert.
- Classes
- Classnamen moeten de UpperCaseCamelCase-conventie volgen
- De ingebouwde classes van Python zijn echter doorgaans lowercase woorden
- Instantievariabelen, methods en functies
- Namen van instantievariabelen moeten volledig lowercase zijn
- Gebruik een underscore om nieuwe woorden toe te voegen aan instanties van variabelen
- Niet-publieke instantievariabelen moeten beginnen met een enkele underscore
- Constanten
- Namen van constanten moeten volledig in hoofdletters
- Gebruik een underscore om nieuwe woorden toe te voegen aan constanten
|
Identifier |
Conventie |
|
Module |
lowercase |
|
Class |
CapWords |
|
Functies |
lowercase |
|
Methods |
lowercase |
|
Typevariabelen |
CapWords |
|
Constanten |
UPPERCASE |
|
Package |
lowercase |
Conclusie
Het beheersen van Python-best practices is essentieel voor het schrijven van schone, efficiënte en onderhoudbare code. Door richtlijnen te volgen over codekwaliteit, logging, commentaar en documentatie, en tools zoals virtuele omgevingen te gebruiken, kun je ervoor zorgen dat je projecten makkelijker te beheren, samen te werken en op te schalen zijn.
Naarmate je je Python-vaardigheden blijft verbeteren, kun je meer diepgaande leermiddelen verkennen om je begrip van Python en het brede scala aan toepassingen te verdiepen. Als je op zoek bent naar gestructureerde begeleiding, bekijk dan deze bronnen:
- How to Learn Python: A Guide to Becoming an Expert – Deze expertgids helpt je door het leerproces te navigeren en biedt tips en technieken om Python te beheersen.
- Introduction to Python for Developers – Perfect voor developers die met Python willen beginnen; deze cursus behandelt de kernconcepten en features van de taal op een praktische, hands-on manier.
- Introduction to Data Science in Python – Zodra je vertrouwd bent met Python, kun je met deze beginnersvriendelijke cursus duiken in data science. Het behandelt essentiële libraries en technieken voor het werken met data in Python.
Python Best Practices: veelgestelde vragen
Waarom is het belangrijk om best practices voor coderen te volgen?
Om leesbaarheid, kwaliteitscode en schaalbaarheid te waarborgen tijdens softwareontwikkelingsactiviteiten.
Wat is een virtuele omgeving?
Een virtuele omgeving is een tool die de afhankelijkheden van verschillende projecten scheidt door voor elk project een aparte, geïsoleerde omgeving te creëren.
Wat is PEP 8?
Het is een document dat standaardrichtlijnen en best practices geeft over hoe je Python-code schrijft.
Wat is inspringing?
Inspringing verwijst naar de spaties aan het begin van een codelijn. Python gebruikt inspringing om een codeblok aan te geven.
Wat is de Zen van Python?
De Zen van Python is een verzameling van 19 "leidende principes" voor het schrijven van computerprogramma's die het ontwerp van de programmeertaal Python beïnvloeden.
Wat is een docstring?
Een Python-docstring is een string die wordt gebruikt om een Python-module, class, functie of methode te documenteren, zodat programmeurs kunnen begrijpen wat het doet zonder de details van de implementatie te hoeven lezen.
Hoeveel soorten commentaar komen vaak voor in Python?
Er zijn twee soorten commentaar: blokcommentaar en inline commentaar.
Ik ben een freelance data-analist en werk samen met bedrijven en organisaties wereldwijd aan datascienceprojecten. Ook geef ik les in data science en heb ik meer dan twee jaar ervaring als docent. Ik schrijf regelmatig artikelen over data science in het Engels en Spaans; sommige daarvan zijn gepubliceerd op bekende platforms zoals DataCamp, Towards Data Science en Analytics Vidhya. Als data scientist met een achtergrond in politicologie en recht wil ik werken op het snijvlak van openbaar beleid, recht en technologie. Ik zet de kracht van ideeën in om innovatieve oplossingen en verhalen te ontwikkelen die helpen bij het aanpakken van urgente uitdagingen, met name de klimaatcrisis. Ik beschouw mezelf als autodidact, een eeuwige leerling en een groot voorstander van multidisciplinariteit. Het is nooit te laat om nieuwe dingen te leren.
Onderwerpen

