Du meinst, falls die Funktionen *unterschiedliche* Argumente bekommen müssen? In diesem Falle gibt es verschiedene Möglichkeiten.
Wenn Du immer einen Container mit Adressedaten übergeben willst und in einigen Fällen nichts, so kannst Du einfach die Funktionen so definieren:
Code: Alles auswählen
def func_with_param(adresses):
# do something with param
def another_func_with_same_param(adresses):
# do something with param
def func_without(*args):
# do something *without* using params!
# we just ignore it!
# die Funktionen einfach *immer* mit Parameter aufrufen
menu[index](adresses)
Wenn Du unterschiedliche Parameter übergeben willst, wird es kniffliger. Dann könntest Du mittels ``functools.partial`` die Funkionen einmalig zu Beginn an die zu übergebenden Objekte binden und hättest immer noch *einen* Aufruf.
So in der Art:
Code: Alles auswählen
from functools import partial
def func_1(arg):
print(arg)
adresses = [
{"name": "Foo", "town": "FooTown"},
{"name": "Bar", "town": "BarTown"}
]
func_1_call = partial(func_1, adresses)
# func_1_call trägst Du in die Menüstruktur ein!
# eigentlich durch ``menu[index]()``
func_1()_call()
> [{'town': 'FooTown', 'name': 'Foo'}, {'town': 'BarTown', 'name': 'Bar'}]
Ändert sich nun im Laufe des Programms das Adressen-Objekt, so wird das ebenfalls durch das ``partial``-Objekt weitergeleitet (logisch, da Du auf demselben Objekt arbeitest!)
Code: Alles auswählen
adresses.append({"name": "FooBar", "town": "FooBarTown"})
func_1_call()
> [{'town': 'FooTown', 'name': 'Foo'}, {'town': 'BarTown', 'name': 'Bar'}, {'town': 'FooBarTown', 'name': 'FooBar'}]
Dies wäre ein Weg, der mir spontan einfiele.