为什么这个函数在没有调用返回时会返回一个值?

2024-09-29 23:16:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我的书中有一个例子,它应该是一个程序,在多个账户上增加利息后计算新的余额:

def addInterest(balances, rate):
    for i in range (len(balances)):
    balances[i] = balances[i] * (1 + rate)


def test():
    amounts = [1000, 2200, 800, 360]
    rate = 0.05
    addInterest(amounts, rate)
    print(amounts)


test()

输出为[1050.0、2310.0、840.0、378.0]

addInterest结尾没有返回调用,因此 为什么不打印(金额)只打印初始定义的金额,即[1000、2200、800、360]?你知道吗


Tags: intest程序forratedefrange账户
3条回答

实际上,当没有指定返回时,默认情况下会返回None。但是,为什么你会得到其他的价值观呢?因为当你这么做的时候

balances[i] = balances[i] * (1 + rate)

您正在修改列表balances的值。你知道吗

因此,您正在执行以下操作:

  1. 声明列表amounts = [1000, 2200, 800, 360]
  2. 调用函数addInterest,将列表作为参数传递。在此函数中,您正在修改此列表的内容。您不返回任何内容,但列表已被修改。你知道吗
  3. 打印修改后的列表并显示新值。你知道吗

请看这篇关于data model的文章,特别是关于可变性的部分。你知道吗

下面是一个列表如何可变的示例

>>> arr = [1,2,3]
>>> arr[0] = 99
>>> print(arr)
[99, 2, 3]

调用addInterest函数时,将amounts数组作为参数传递,它修改了该数组。下面是另一个例子,展示了这是如何发生的

def test(my_list):
    print(my_list)
    my_list[0] = 99
    print(my_list)

现在在解释器中测试

>>> arr = [1,2,3]
>>> x = test(arr)
[1,2,3] 
[99, 2, 3]
>>> arr
[99,2,3]
>>> x
>>> x is None
True

您可以看到,函数的返回值是None,我们将其存储在名为x的变量中。但是这个函数还有一个副作用,即改变传递给它的listarr的值。你知道吗

最后,让我们看一个类似您的示例,其中数组是在函数中定义的。你知道吗

def change_list(l):
    print(l)
    l[0] = 99
    print(l)


def test():
    arr = [1,2,3]
    change_list(arr)

在口译员那里查一下

>>> x = test()
[1, 2, 3]
[99, 2, 3]
>>> x
>>> x is None
True

希望这能消除任何混乱。你知道吗

函数不返回任何内容,但会打印结果。如果你这么做了:

def test():
    amounts = [1000, 2200, 800, 360]
    rate = 0.05
    addInterest(amounts, rate)

那么test()将是None(这是函数的默认返回值)。你知道吗

如果希望函数返回结果,则必须将打印更改为如下返回:

def test():
    amounts = [1000, 2200, 800, 360]
    rate = 0.05
    addInterest(amounts, rate)
    return amount

另外,在函数中修改列表时要小心。参见示例https://stackoverflow.com/a/17686659/4709400

相关问题 更多 >

    热门问题