Ich weiß, dass diese Frage ziemlich simpel und albern ist, aber ich habe es vermasselt, im Internet zu suchen. Bedenke, wir haben eine 2-dimensionale Liste in Python, die ein Spielfeld von hex repräsentiert und dessen Elemente durch irgendeine Funktion verändert werden (wie Stein in einer Zelle im Spielfeld zu spielen).Wie definiert man eine aufrufbare Funktion, wenn der Wert eines Elements in der Liste geändert wird?
Ich suche nach einem Werkzeug in Python, das eine Funktion definieren kann, die immer dann aufgerufen wird, wenn der Wert eines Elements im Array geändert wird. Ich habe bereits die Funktion trace
in tkinter gefunden, die eine Funktion aufruft, wenn StringVar
, DoubleVar
usw. geändert werden.
Ich frage mich, ob eine ähnliche für einfache Listen oder sogar numply Listen gefunden werden könnte.
Erstellen Sie Ihre benutzerdefinierte Liste (eine Klasse erben von "Liste") und überschreiben Sie "__setitem__" -Methode. Sehen Sie sich auch Event-Manager an. – freakish
'Numpy' Array hat keine solche Funktionalität. Sie können Ihr benutzerdefiniertes Objekt implementieren, indem Sie von der Klasse "numpy.array" erben. Sie können hier http://docs.scipy.org/doc/numpy-1.10.1/user/basics.subclassing.html starten – Kasramvd
Wissen Sie, dass wenn Sie die Liste wie in 'lst [i] = val 'ändern könnte den Code ändern in: 'lst [i] = val; callaback (lst, i) 'und fertig sein? Um Code-Duplikate zu vermeiden, verwenden Sie einfach eine Funktion, um die Elemente zu setzen: 'def set_item (lst, i): lst [i] = wert; callaback (lst, i)'. Sicher können Sie dies durch Vererbung vermeiden, aber das Erben von eingebauten und "numpy" Arrays ist viel weniger trivial als es klingt und * viel * mehr Code. – Bakuriu