0
對於一個有趣的小項目,我創建了以下代碼來實現函數中的非OOP狀態保留。我提出了兩種方法,然後意識到在第二個示例中嵌套inner_fib
函數是多餘的(似乎無論如何都正常工作)。我已經測試了所有三個並得到了相同的結果。閉包與功能屬性?
從最佳做法的角度來看,是否比其他人更喜歡? Func屬性更加簡潔,但是我可以看到它們讓以後維護代碼的人感到困惑。這裏是我的例子:
def fib(first=0, second=1, temp=0):
first = 0
second = 1
temp = 0
def inner_fib():
nonlocal temp, first, second
temp = first + second
first = second
second = temp
return first
return inner_fib
def fib2():
def inner_fib():
inner_fib.temp = inner_fib.first + inner_fib.second
inner_fib.first = inner_fib.second
inner_fib.second = inner_fib.temp
return inner_fib.first
return inner_fib
def inner_fib():
inner_fib.temp = inner_fib.first + inner_fib.second
inner_fib.first = inner_fib.second
inner_fib.second = inner_fib.temp
return inner_fib.first
res = 0
a = inner_fib
a.first = 0
a.second = 1
a.temp = 0
while True:
b = a()
print(b, res + b)
if b % 2 == 0 and b < 4000000:
res += b
elif res + b > 4000000:
break
print(res)
現在你爲什麼要這麼做?這是一個可怕的想法。它與使用全局變量的效果相同。 –
因爲我正在學習Mark Lutz的「學習Python」中的函數:)他將閉包和函數屬性作爲輕量級方法來保留狀態信息。 – flybonzai