[英]function return of python
我正在阅读 John Zelle 的 Python 编程 2ed Ch6。 我遇到了一个概念问题:他的示例代码说:
#addinterest3.py
def addInterest(balances, rate):
for i in range(len(balances)):
balances[i] * (1 + rate)
def test():
amounts = [1000, 2200, 800, 360]
rate = 0.05
addInterest(amounts, rate)
print(amounts)
test()
上面的代码
“分配到列表中导致它引用新值。当 Python 进行垃圾收集时,旧值实际上会被清理”
根据这个想法,我尝试了一个 test.py
def add(balance, rate):
balance = balance * (1 + rate)
def test():
amount = 1000
rate = 0.5
amount = add(amount, rate)
print(amount)
test()
我认为余额也可以通过新值分配,但结果在我的终端中返回“无”。 谁能解释它们之间的根本区别是什么? 为什么列表赋值不需要使用return来传递值但仍然会被保存,另一方面,我的test.py在函数之后确实需要一个“返回余额”?
您没有获得任何amount
值的原因是因为您的add
函数没有返回任何内容。
def add(balance,rate):
return balance*(1+rate)
将返回一个分配给amount
的值。
除此之外,开始的代码是错误的。 如果您要在 python 中尝试此代码,您会发现它会打印出来:
[1000, 2200, 800, 360]
它需要更改为:
def addInterest(balances,rate):
for i in range(len(balances)):
balances[i] = balances[i]*(1+rate)
正如我所料,如果你将一个列表作为函数参数传递,它就像你传递这个列表上的指针一样。 Python 中的赋值语句不复制对象,它们在目标和对象之间创建绑定。 因此,如果您更改函数内的列表,您可以看到这些更改。 如果您传递变量,则这些变量的副本将在函数内部使用。
作为示例,您还可以尝试以下代码:
a = [1, 2]
b = a
a.append(3)
print a, b
输出:
[1, 2, 3] [1, 2, 3]
UPS!
您的add
函数不会return
任何内容,因此 Python 会自动让它在最后返回None
。 当你写:
amount = add(amount,rate)
add
返回None
,所以amount
设置为None
。
此外,并非 Python 中的所有对象都是可变的,因此从函数内部修改变量不会达到您的预期。 改用return
:
def add(balance,rate):
return balance * (1 + rate)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.