ich möchte einige Funktionen schreiben, die alle auf eine Excel Datei zugreifen, die gelesenen Daten verarbeiten und irgendwas zurück geben. Ich möchte nicht in jeder Funktion die gleichen Zeilen von wegen <Excel Datei öffnen> stuff <Excel Datei schließen> schreiben, also dachte ich mir das wäre die richtige Gelegenheit für einen Decorator:
Code: Alles auswählen
def excel_decorator(func):
def wrapper(*args, **kwargs):
wb = load_workbook(EXCEL_FILE)
ws = wb["sheet"]
func(*args, ws=ws)
return func(*args, ws=ws)
wb.close()
return wrapper
@excel_decorator
def get_value(article, ws=()):
for row in ws.iter_rows()
...
return "x"
ws wird allerdings im Decorator definiert und von da an die Funktion übergeben.
Da ich viele ähnliche Funktionen in diesem Sinne schreiben werde, frage ich mich, ob es eine Lösung hierfür gibt, ohne dass ich ws=() in jeder neuen Funktion angebe?