0

我正在学习 Zelle 的 Python 编程,但在函数上有点卡住了。

我们得到了这个:

def addInterest(balance, rate):
    newBalance = balance * (1+rate)
    balance = newBalance

def test(): 
    amount = 1000
    rate = 0.05
    addInterest(amount, rate)
    print amount

test()

此代码无法打印 1050 作为输出。但以下成功:

def addInterest(balance, rate):
    newBalance = balance * (1+rate)
    return newBalance

def test():
    amount = 1000
    rate = 0.05
    amount = addInterest(amount, rate)
    print amount

test() 

细微的差别在于addInterest函数的第 3 行。Zelle 解释了这一点,但我还没有掌握它的窍门。你能解释一下为什么#1 代码 - 几乎是相同的 - 不做 #2 做的事吗?

4

3 回答 3

3

那是因为balance你在里面修改的对象和你传递给函数的对象addInterest是不一样的。amount简而言之,您修改了对象的本地副本,传递给函数,因此原始对象的值保持不变。如果您在 python shell 中运行以下代码,您可以看到它:

>>> def addInterest(balance, rate):
...     print (balance)
...     newBalance = balance * (1 + rate)
...     balance = newBalance
... 
>>> amount = 1000
>>> rate = 0.05
>>> print id(amount)
26799216
>>> addInterest(amount, rate)
1000
>>> 

id函数返回一个对象的标识,可以用来测试两个对象是否相同。

于 2013-01-26T11:34:09.887 回答
0

关键词是return。Return 几乎用于将函数的值返回给变量(在您的第二个代码中,变量是amount)。

在#1中,您没有返回任何东西,这就是为什么print amount不是您想要的。

在您的第二个代码中,您是returningnewBalance 的价值。该变量amount现在与函数中的值相同newBalance

所以在你的第一个代码中,什么都不做addInterest(amount, rate)。它没有返回任何东西,所以它没有用。但是,您在第二个功能中所做的事情是正确的。

于 2013-01-26T11:30:40.527 回答
0

查看有关如何通过引用传递变量的漂亮答案?

    self.variable = 'Original'
    self.Change(self.variable)

def Change(self, var):
    var = 'Changed'
于 2013-01-26T11:44:42.473 回答