In JavaScript könnte ich eine Funktion wie folgt schreiben:Gibt es eine "pythonische" Art, diese Schließung zu schreiben?
function counter() {
foo = 0;
function increment() {
foo += 1
console.log(foo);
}
function printVal() {
console.log(foo);
}
return {
increment: increment,
printVal: printVal,
}
}
func = counter();
func.increment()
func.increment()
func.printVal()
ich eine ähnliche Funktion mit Python zu erreichen zu versuchen. Vor allem, wie ich über die Rückgabe der äußeren Funktion auf beide inneren Funktionen zugreifen kann. Hier
ist ein funktionierendes, aber lustig suchen, Version in Python:
def counter():
foo = {'bar': 0}
def increment():
foo['bar'] += 1
return foo['bar']
def printVal():
return foo['bar']
return {'increment': increment, 'printVal': printVal}
func = counter()
func['increment']()
func['printVal']()
Gibt es irgendeine Art von eleganter oder ‚pythonic‘ Art und Weise einen Verschluss wie diese zu schreiben?
In diesem Fall möchten Sie wahrscheinlich das Objekt 'collections.Counter' verwenden oder einfach eine Klasse schreiben. – monkut
Sie sollten sich fragen, warum Sie in JS überhaupt eine Schließung verwenden: Schließungen sind oft ein Ersatz für _classlike_ Verhalten. Im Fall von Python könnte man tatsächlich eine 'Klasse' verwenden, um das Accoring-Verhalten zu modellieren. Und Ihre beiden Funktionen werden zu realen Methoden. –