Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Werkboek — Hoofdstuk 9: Modules en virtuele omgevingen

Let op: alle programmacode schrijf je in het Engels (zoals in het boek). De uitleg en opdrachten zijn in het Nederlands.

Doel van dit hoofdstuk

  • Werken met modules en pakketten (packages) en deze importeren.
  • Het importpad (sys.path) begrijpen en het __name__ == "__main__"-patroon toepassen.
  • Een mini-tour door de standaardbibliotheek (math, random, datetime, pathlib).
  • Basisgebruik van pip en virtuele omgevingen (conceptueel/uitvoering buiten dit document).
  • Veelvoorkomende valkuilen vermijden (naamconflicten, star-imports, verkeerde werkdirectory).

Richtlijnen

  • Gebruik expliciete imports (import package of from package import name), vermijd from module import *.
  • Schrijf duidelijke, Engelstalige modulenaam- en functienamen.
  • Voor CLI-voorbeelden: voeg waar zinvol een if __name__ == "__main__":-blok toe.
  • Voor oefeningen met pip/venv: schrijf de commando’s en voorbeeldcode; uitvoeren doe je lokaal in je eigen omgeving.

Oefening 1 — Eigen module importeren (temperature) Maak temperature.py met twee functies:

  • c_to_f(c: float) -> float
  • f_to_c(f: float) -> float Schrijf een apart script app.py dat from temperature import c_to_f, f_to_c gebruikt en twee voorbeelden print.

Oefening 2 — import module vs. from module import name Schrijf twee varianten van een script dat math.pi print:

  • met import math en gebruik math.pi;
  • met from math import pi en gebruik pi. Schrijf kort in een comment wat het praktische verschil is in gebruik/namespace.

Oefening 3 — __name__ == "__main__" Breid temperature.py uit met een __main__-blok dat een optionele command-line parameter leest (sys.argv[1] als Celsius, anders 0.0) en de Fahrenheit-waarde print. Test door het bestand direct te runnen.

Oefening 4 — Het importpad bekijken Schrijf show_path.py dat alle paden in sys.path print (één per regel). Run het script vanuit verschillende werkdirectories en observeer de eerste entries. Noteer in comments wat je ziet.

Oefening 5 — Eenvoudig package: calc/ Maak een map calc/ met:

  • __init__.py (mag leeg, of exporteer add, sub via __all__).
  • ops.py met functies add(a, b), sub(a, b), mul(a, b), div(a, b) (gooi ZeroDivisionError bij b == 0). Schrijf main.py dat from calc.ops import add, div gebruikt en twee voorbeelden print.

Oefening 6 — Relatieve import binnen package Voeg in calc/cli.py een functie main() toe die from .ops import add gebruikt en python -m calc.cli als aanroeppad ondersteunt (lees optioneel twee getallen uit sys.argv).

Oefening 7 — Vermijd star-import Gegeven deze slechte regel: from math import *.

  • Herschrijf naar een expliciete import (kies relevante namen of gebruik import math).
  • Leg in een comment in 1 zin uit waarom * onwenselijk is.

Oefening 8 — Standaardbibliotheek mini-taken Schrijf één script met drie korte voorbeelden:

  • random.choice(["red","green","blue"]) en print het resultaat.
  • datetime.now().isoformat(timespec="seconds") en print het.
  • Controleer met pathlib.Path("notes.txt").exists() of het bestand bestaat en print een boodschap.

Oefening 9 — Derde-partij module (pip) — conceptueel Schrijf de commando’s die je zou uitvoeren in een venv om requests te installeren (niet daadwerkelijk uitvoeren hier):

  • aanmaken/activeren venv;
  • python -m pip install requests;
  • python -m pip freeze > requirements.txt. Schrijf in fetch.py voorbeeldcode die https://httpbin.org/get ophaalt met een timeout en statuscode print. Voeg een comment toe dat dit in een geactiveerde venv hoort te draaien.

Oefening 10 — Naamconflict met standaardbibliotheek Maak een bestand random.py met een eigen functie foo(). Probeer in een ander script import random; print(random.choice([1,2,3])). Observeer de fout (of het verkeerde gedrag). Hernoem jouw bestand (bijv. myrandom.py) en laat zien dat het probleem verdwijnt. Schrijf in comments de verklaring.

Uitdaging (optioneel) — Klein greet-package met CLI Maak een package greet/ met __init__.py en cli.py:

  • In __init__.py: functie hello(name: str) -> str en eventueel __all__ = ["hello"].
  • In cli.py: main() die een naam uit sys.argv leest en hello print. Toon hoe je python -m greet.cli Ava kunt gebruiken (bij juiste PYTHONPATH of na installatie in een venv).