Seite 1 von 1
Funktionszuordnung in Liste führt diese jeweils aus
Verfasst: Dienstag 30. August 2016, 19:22
von harryberlin
Wenn man die Funktionen mit Klammer mit Klammer und args in die Liste einträgt, wird die Funktion erstmal ausgeführt.
Code: Alles auswählen
test = [event_eins(), event_zwei(True), event_drei(False, 30)]
Ich bin auf diese Lösung gekommen.
Kann man diese Prozedur auch besser lösen?
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def event_eins():
print '1'
def event_zwei(state):
print '2', state
def event_drei(state, number):
print '3', state, number
def main():
test = [[event_eins,()], [event_zwei,(True,)], [event_drei,(False, 30)]]
for function, args in test:
function(*args)
if __name__ == '__main__':
main()
Re: Funktionszuordnung in Liste führt diese jeweils aus
Verfasst: Dienstag 30. August 2016, 19:41
von BlackJack
@harryberlin: `functools.partial()` wäre noch eine Möglichkeit um die Parameter an die Funktion zu binden.
Re: Funktionszuordnung in Liste führt diese jeweils aus
Verfasst: Dienstag 30. August 2016, 20:45
von harryberlin
aber an der liste lässt sich sonst nichts weiter reduzieren? bin nicht unbedingt ein freund von liste in der liste, in der liste. macht es irgendwann unübersichtlich.
Re: Funktionszuordnung in Liste führt diese jeweils aus
Verfasst: Dienstag 30. August 2016, 21:15
von BlackJack
@harryberlin: Doch, mit `functools.partial()` wären in der Liste dann direkt Funktionsobjekte die man aufrufen kann und die kein Argument mehr erwarten. Mit ``lambda``-Ausdrücken ginge das auch.
Re: Funktionszuordnung in Liste führt diese jeweils aus
Verfasst: Dienstag 30. August 2016, 21:25
von harryberlin
dann hab ich es wohl falsch verstanden, dass es nur sinn macht, wenn man immer wieder die gleiche funktion nutzen will.
mal schaun, vllt. komm ich noch dahinter.
Re: Funktionszuordnung in Liste führt diese jeweils aus
Verfasst: Dienstag 30. August 2016, 23:27
von snafu
harryberlin hat geschrieben:dann hab ich es wohl falsch verstanden, dass es nur sinn macht, wenn man immer wieder die gleiche funktion nutzen will.
Das machen deine Beispiele doch auch.
Code: Alles auswählen
from __future__ import print_function
from functools import partial
func = partial(print, 1, 2, 3)
func()
# ...ist das gleiche wie:
print(1, 2, 3)
Sofern dies nicht tut, was du dir vorgestellt hast, dann erkläre mal mit eigenen Worten, was dein Ziel ist.
Re: Funktionszuordnung in Liste führt diese jeweils aus
Verfasst: Dienstag 30. August 2016, 23:31
von snafu
Du kannst natürlich auch sowas machen:
Code: Alles auswählen
print_info = partial(print, 'INFO:')
print_info('Irgendein Text')
print_info('Noch ein Text')
...mal unabhängig davon, dass dies nur eine andere Schreibweise hierfür ist:
Re: Funktionszuordnung in Liste führt diese jeweils aus
Verfasst: Dienstag 30. August 2016, 23:52
von harryberlin
Wenn man es so betrachtet, dann stimmts. Habe hier zur Vereinfachung fast ziemlich gleiche Funktionen mit "print".
Aber eigentlich möchte ich es für unterschiedlichste Funktionen nutzen. Mal mit, mal ohne Argumente.
Danke für dein Beispiel, das hab ich jetzt glaub verstanden.