我必須根據單位價格和單位數來計算我股票的總價值。我有下面的代碼在Python:如何將此代碼轉換爲功能程序(如範例中)?
prices = {
"banana" : 4,
"apple" : 2,
"orange" : 1.5,
"pear" : 3,
}
stock = {
"banana" : 6,
"apple" : 0,
"orange" : 32,
"pear" : 15,
}
for key in prices:
print key
print "price: %s" % prices[key]
print "stock: %s" % stock[key]
total = 0
for key in prices:
total = total + prices[key]*stock[key]
print total
而且我試過用這種替代的最後一個塊將其轉換爲一個功能更強大的程序:
def total(x):
if len(x) == 1:
return prices[prices.keys()[0]]*stock[prices.keys()[0]]
else:
return prices[prices.keys()[0]]*stock[prices.keys()[0]] + total(x[1:])
print total(prices)
上面的代碼得到這個錯誤:
Traceback (most recent call last):
File "python", line 30, in <module>
File "python", line 28, in total
TypeError: unhashable type
有人可以請更正我的代碼更多的功能編程版本?
在Python中通常要避免遞歸。功能!=遞歸。 –
哦,對,'StackOverflowError'很糟糕。 – LexieHankins
??停止如此戲劇化。我只是簡單地指出,如果您要就如何使用特定語言編寫代碼提供建議,則不應鼓勵使用通常會導致性能較差的構造。 Python不是爲遞歸而構建的,分配一個新的棧幀有很多開銷,並且沒有tail-call優化。還有一個遞歸限制。有些情況下,比如走在一棵樹上,你知道它並不是很深,在這種情況下,遞歸實現的簡單性可能會超過非遞歸實現。 –