在JavaScript我可能會寫這樣的功能:是否有更多'pythonic'的方式來編寫這個閉包?
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()
我想嘗試使用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']()
是否有某種寫這樣一個封閉的更優雅或「Python化」的方式?
在這種情況下,您可能想要使用'collections.Counter'對象,或者只寫一個類。 – monkut
你應該問自己,爲什麼你首先在JS中使用閉包:閉包常常是_classlike_行爲的替代品。在python的情況下,你可以使用'class'來模擬accoring行爲。你的兩個函數變成_real_方法。 –