Naar inhoud springen

Zen van Python

Uit Wikipedia, de vrije encyclopedie
De Zen van Python-uitvoer in een terminal

De Zen van Python is een verzameling van 19 'leidende principes' voor het schrijven van computerprogramma's die van invloed zijn op het ontwerp van de programmeertaal Python. De Python-code die aan deze principes voldoet, wordt vaak 'Pythonisch' genoemd.[1]

Softwareontwikkelaar Tim Peters schreef deze set principes en plaatste deze in 1999 op de Python-mailinglijst.[2] Peters' lijst liet een twintigste principe open "voor Guido om in te vullen", verwijzend naar Guido van Rossum, de oorspronkelijke auteur van de Python-taal. De vacature voor een twintigste principe is nog niet ingevuld.

Peters' Zen van Python werd opgenomen als item nummer 20 in de officiële Python Enhancement Proposals van de taal en werd vrijgegeven in het publieke domein.[3] Het is ook opgenomen als een easter egg in de Python-interpreter, waar het kan worden weergegeven door import this in te voeren.[3][a]

In mei 2020 gebruikte Barry Warsaw (ontwikkelaar van GNU Mailman) het als tekst voor een liedje.[4]

De Zen van Python geïllustreerd

De principes worden als volgt opgesomd:[b]

  • Mooi is beter dan lelijk.
  • Expliciet is beter dan impliciet.
  • Eenvoudig is beter dan complex.
  • Complex is beter dan gecompliceerd.
  • Plat is beter dan genest.
  • Sparend is beter dan dicht.
  • Leesbaarheid telt.
  • Speciale gevallen zijn niet speciaal genoeg om de regels te breken.
  • Hoewel praktische bruikbaarheid boven zuiverheid gaat.
  • Fouten mogen nooit stilzwijgend doorgelaten worden.
  • Tenzij expliciet stilgezwegen.
  • In het geval van ambiguïteit, weiger de verleiding om te gokken.
  • Er zou één — en bij voorkeur maar één — voor de hand liggende manier moeten zijn om het te doen.[c]
  • Hoewel die manier niet onmiddellijk voor de hand ligt, tenzij je Nederlands bent.
  • Nu is beter dan nooit.
  • Hoewel nooit vaak beter is dan nu meteen.[d]
  • Als de implementatie moeilijk uit te leggen is, is het een slecht idee.
  • Als de implementatie gemakkelijk uit te leggen is, kan het een goed idee zijn.
  • Naamruimten zijn een geweldige idee — laten we daar meer van doen!

Pythonisch zijn

[bewerken | brontekst bewerken]

Een van de principes, "Er zou één – en bij voorkeur slechts één – voor de hand liggende manier moeten zijn om het te doen", kan worden aangeduid als de "Pythonische" manier.[5] De officiële definitie van "Pythonisch" is:[1]

Een idee of stukje code dat nauw aansluit bij de meest voorkomende idiomen van Python, in plaats van code te implementeren met concepten die in andere talen voorkomen. Een veelgebruikte idioom in Python is bijvoorbeeld het doorlopen van alle elementen van een iterable met behulp van een for-statement. Veel andere talen hebben dit type constructie niet, dus mensen die niet bekend zijn met Python gebruiken soms een numerieke teller:

for i in range(len(food)):
  print(food[i])

In tegenstelling tot de schonere, Pythonische methode:

for piece in food:
  print(piece)

Code die moeilijk te begrijpen is of leest als een ruwe transcriptie uit een andere programmeertaal wordt onpythonisch genoemd.[6]

In de praktijk

[bewerken | brontekst bewerken]

Sinds de Zen van Python is uitgebracht, is er onderzoek gedaan naar de effectiviteit en het daadwerkelijke gebruik ervan onder ontwikkelaars. Ondanks het verschil in interpretatie tussen beginners en ervaren Python-programmeurs, tonen interviews onder 13 Python-programmeurs met verschillende vaardigheden aan dat de Zen van Python "een positieve invloed heeft op de manier waarop ontwikkelaars code schrijven en erover praten".[5] Onderzoekers hebben deze casestudy uitgebreid om het gebruik van Python-idiomen in GitHub-repositories te onderzoeken en ontdekt dat het gebruik van "Pythonische idiomen" [e] in de loop der tijd is toegenomen.[7] Het schrijven van Python-code die aansluit bij de Zen van Python kan geheugen en looptijd van Python-programma's besparen.[8] De wens om in Python-code te schrijven heeft geleid tot het refactoren van tools om programmeurs te helpen dit doel te bereiken.

  1. De broncode voor de Zen van Python is te vinden op Github.
  2. De Wikipedia-links hieronder zijn toegevoegd voor verdere referentie en begrip, en waren niet expliciet gelinkt in de Zen van Python.
  3. De opmaak van de streepjes in deze en de laatste regel is opzettelijk inconsistent, verwijzend naar de verschillende opmaakconventies.
  4. In de interpreter-easter egg wordt dit geschreven als "Although never is often better than right now." Dit volgt een lang bestaande conventie in platte-tekstcommunicatie — waarin bepaalde typografische accentuering vaak onmogelijk is — waarbij nadruk wordt aangegeven met sterretjes.
  5. Een lijst van hun Pythonische idiomen is hier te vinden: https://slimshadyiam.github.io/ZenYourPython/
  1. a b (en) Glossary. Python Documentation. Geraadpleegd op 7 februari 2024.
  2. Peters, Tim, The Python Way. Python Software Foundation (June 4, 1999). Geraadpleegd op March 26, 2019.
  3. a b Peters, Tim, PEP 20—The Zen of Python. Python Software Foundation (August 19, 2004). Geraadpleegd op March 26, 2019.
  4. Warsaw, Barry, The Zen of Python. We Fear Change (10 May 2020). Gearchiveerd op 3 juni 2020.
  5. a b Alexandru, Carol V. (24 oktober 2018). Proceedings of the 2018 ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software. Association for Computing Machinery, New York, NY, USA. DOI:10.1145/3276954.3276960, "On the usage of pythonic idioms", 1–11. ISBN 978-1-4503-6031-9. Gearchiveerd op 24 maart 2024. Geraadpleegd op 19 februari 2024.
  6. Code Style – The Hitchhiker's Guide to Python. docs.python-guide.org. Gearchiveerd op 27 January 2021. Geraadpleegd op 20 January 2021.
  7. Farooq, Aamir (22 november 2021). Proceedings of the 14th ACM SIGPLAN International Conference on Software Language Engineering. Association for Computing Machinery, New York, NY, USA. DOI:10.1145/3486608.3486909, "There is more than one way to zen your Python", 68–82. ISBN 978-1-4503-9111-5.
  8. Leelaprute, Pattara (20 oktober 2022). Proceedings of the 30th IEEE/ACM International Conference on Program Comprehension. Association for Computing Machinery, New York, NY, USA. DOI:10.1145/3524610.3527879, "Does coding in Pythonic zen peak performance?: Preliminary experiments of nine Pythonic idioms at scale", 575–579. ISBN 978-1-4503-9298-3.
[bewerken | brontekst bewerken]