====== Python intro ======
🗂️ [[start|Terug naar start]]\\
* [[virtuele_omgeving_voor_python|Virtuele omgeving voor Python (incl. gebruik in VScode)]]
* [[gradio|Gradio UI voor Python]]
> **[[https://www.python.org/|Python]]** is een veelgebruikte programmeertaal die bekend staat om zijn eenvoud en leesbaarheid. Het wordt gebruikt voor het ontwikkelen van verschillende soorten software, van web toepassingen tot wetenschappelijke analyse. Met een duidelijke en expressieve syntaxis maakt Python het gemakkelijk om code te schrijven en te onderhouden. Het heeft een uitgebreide standaardbibliotheek en ondersteunt ook een breed scala aan externe bibliotheken, waardoor het een krachtig hulpmiddel is voor zowel beginners als ervaren ontwikkelaars. Python wordt ook gebruikt in domeinen zoals kunstmatige intelligentie, dataverwerking en automatisering, waardoor het een veelzijdige en populaire taal is.
=== Python en de OpenAI API ===
> Python biedt ontwikkelaars een gebruiksvriendelijke manier om te communiceren met de **[[https://platform.openai.com/docs/api-reference|OpenAI API]]**. Met behulp van Python kunnen gebruikers eenvoudig verzoeken naar de API sturen en de respons verwerken. Door het integreren van de OpenAI API kunnen ontwikkelaars toegang krijgen tot krachtige mogelijkheden, zoals natuurlijke taalverwerking en tekst generatie, waardoor ze innovatieve applicaties kunnen bouwen. Python's flexibiliteit en uitgebreide bibliotheekecosysteem maken het een ideale taal voor het werken met de OpenAI API. Met gedetailleerde documentatie en voorbeeldcode kunnen ontwikkelaars snel aan de slag en hun projecten naar nieuwe hoogten tillen.
----
**[[https://colab.research.google.com/|Colab Google Colaboratory]]**
----
==== PATH-omgevingsvariabele bewerken ====
**Voor Windows 10 en Windows 11**:\\
Klik met de rechtermuisknop op de Startknop (of druk op de Windows-toets + X) en kies 'Systeem' of 'System'.\\
Klik op 'Systeeminfo' of 'About' aan de onderkant van de instellingenpagina (soms moet je scrollen naar beneden).\\
Klik aan de rechterkant op 'Geavanceerde systeeminstellingen' of 'Advanced system settings'.\\
Ga naar het tabblad 'Geavanceerd' of 'Advanced'.\\
Klik op de knop 'Omgevingsvariabelen...' of 'Environment Variables...'.\\
Onder het gedeelte 'Systeemvariabelen' (de onderste box), zoek je de variabele 'Path' en selecteer je deze.\\
Klik op 'Bewerken...' of 'Edit...'.\\
Voeg het gewenste pad toe door op 'Nieuw' te klikken en het pad in te voeren of te plakken.\\
Bevestig alle dialoogvensters door op 'OK' te klikken.\\
----
**Pip:**\\
Python update PIP //(regelmatig uitvoeren)//:
python -m pip install -U pip
----
**Check Python versie:**\\
python -V
----
==== Modules installeren ====
Bij problemen met gewoon installeren de onderstaande methode gebruiken
python -m pip install PyMuPDF
----
===== GUI Gebruikers interface met Tkinter =====
[[https://likegeeks.com/python-gui-examples-tkinter-tutorial/|Python GUI examples (Tkinter Tutorial)]]\\
[[https://realpython.com/python-gui-tkinter/|Python GUI Programming With Tkinter]]\\
[[https://docs.python.org/3/library/tk.html|Graphical User Interfaces with Tkinter (Tk)]]
from tkinter import *
window = Tk()
window.title("Hallo wereld")
window.mainloop()
----
===== Maak een .exe van Python script =====
[[https://datatofish.com/executable-pyinstaller/|Create Executable of Python Script using PyInstaller]]
**Installeer PyInstaller pakket:**\\
python -m pip install -U pip
pip install pyinstaller
----
===== Website tonen in Python app =====
pip install pyqt5 pyqtwebengine
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QUrl
import sys
class MainWindow(QWebEngineView):
def __init__(self):
super(MainWindow, self).__init__()
self.load(QUrl("https://jouwwebsite.nl"))
def main():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
----
===== asyncio =====
[[https://realpython.com/async-io-python/|asyncio]] is een ingebouwde module in Python waarmee je asynchrone (concurrente) code kunt schrijven. Het maakt gebruik van coroutines, die met het sleutelwoord async worden gedefinieerd, en van het await-statement om te wachten op asynchrone operaties (zoals I/O-bound taken) zonder de hele applicatie te blokkeren. Met een event loop worden deze coroutines efficiënt gepland en uitgevoerd. Dit is bijzonder handig voor toepassingen waar je veel wachttijd hebt, zoals bij netwerkcommunicatie of bestand I/O, omdat je zo meerdere taken tegelijk kunt laten draaien.
import asyncio
class AsyncWorker:
def __init__(self, name):
self.name = name
async def async_task(self, seconds):
print(f"{self.name}: Taak gestart, wacht {seconds} seconden.")
# Simuleer een I/O-bound operatie met asyncio.sleep
await asyncio.sleep(seconds)
print(f"{self.name}: Taak voltooid na {seconds} seconden.")
return f"{self.name} klaar na {seconds} seconden"
async def run_tasks(self):
print(f"{self.name}: Start meerdere taken...")
# Start twee asynchrone taken en wacht tot beide klaar zijn
results = await asyncio.gather(
self.async_task(2),
self.async_task(3)
)
print(f"{self.name}: Alle taken voltooid. Resultaten: {results}")
# Het uitvoeren van de asynchrone taken via de event loop
if __name__ == "__main__":
worker = AsyncWorker("Worker1")
asyncio.run(worker.run_tasks())
Uitleg van de code:
- **De class** AsyncWorker:
* De __init__
-methode initialiseert een instantie met een naam.
* **async_task**: Dit is een coroutine die een taak simuleert door een aantal seconden te wachten met await asyncio.sleep(seconds).
* **run_tasks**: Deze coroutine start meerdere taken tegelijk met asyncio.gather en wacht totdat ze allebei voltooid zijn.
- **Event loop starten**:
* Met **asyncio.run(worker.run_tasks())** wordt de event loop gestart en de coroutine run_tasks uitgevoerd.
Dit voorbeeld laat zien hoe je asyncio kunt gebruiken binnen een class om meerdere asynchrone taken tegelijk te laten draaien. Hierdoor kun je efficiënter omgaan met taken die wachten op externe bronnen zonder dat je applicatie blokkeert.
import asyncio
class AsyncApp:
def __init__(self, name):
self.name = name
# Start de asynchrone taken direct bij initialisatie
self.start()
async def async_task(self, seconds):
print(f"{self.name}: Taak gestart, wacht {seconds} seconden.")
await asyncio.sleep(seconds)
print(f"{self.name}: Taak voltooid na {seconds} seconden.")
return f"Resultaat van {seconds} seconden"
async def main(self):
print(f"{self.name}: Start meerdere taken...")
# Voer meerdere taken gelijktijdig uit
results = await asyncio.gather(
self.async_task(1),
self.async_task(2),
self.async_task(3)
)
print(f"{self.name}: Alle taken voltooid. Resultaten: {results}")
def start(self):
# Start de event loop en voer de main coroutine uit
asyncio.run(self.main())
# Wanneer dit script direct wordt uitgevoerd, maakt het een instance van AsyncApp aan.
if __name__ == "__main__":
app = AsyncApp("AsyncAppInstance")
----
===== Python links =====
[[https://www.python.org/downloads/|Download Python]]\\
[[https://programmeerplaats.nl/python-installeren/|Python installeren]]\\
[[https://docs.python.org|Python documentatie]]
----