存储从for循环创建的新值在哪里?

时间:2014-09-19 00:12:56

标签: python function for-loop python-3.x

我试图绕过以下函数和循环:

def invest(amount, rate, time):
    print ("Principal amount: ${}" .format(amount))
    print ("Annual rate of return: {}" .format(rate))
    for t in range(1, 9):
        amount = amount * (1 + rate)
        print ("Year {}: ${}" .format(t, amount))

invest(100, .05, 8)
invest(2000, 0.025, 5)

据我了解,100的数量传递给函数,for循环计算了回报率。这会将金额的值增加到105.0。但是,我正在努力理解的是这个数量存储在哪里?它存储在函数中还是存储在for循环中?在第二个循环中,使用了105.0的数量,但是这个数字来自哪里?

类似问题的第二个代码示例如下:

def doubles(number):    
    number = number * 2 
    return number       

my_num = 3          
for n in range(0, 3):   
    my_num = doubles(my_num)     
    print (my_num)

for循环从my_num变量中获取数字3并将其传递给函数,该函数将其多次传递2.该数字将返回并在for循环中打印。在第二个循环中,它取数字6并将其传递给函数。 6的值存储在哪里?它是否更新了变量,是否保存在for循环或函数中?

感谢。

2 个答案:

答案 0 :(得分:1)

调用函数时,python会创建一个"本地范围" (字典),以及存储变量的地方。每次调用函数时都会重新创建此作用域。第一步是将函数参数添加到本地,然后在使用时添加其他变量。您可以print(locals()["amount"])随时查看正在发生的事情。一旦进入本地函数作用域,无论嵌套条件的深度如何,变量都会进入相同的作用域。此代码会不断重新分配amount,以便每次循环使用新值。

答案 1 :(得分:0)

像这样的作业

amount = amount * (1 + rate)

表示以下内容:计算右侧的结果,这恰好涉及变量金额的值。计算完成后,结果存储在左侧的变量中。这恰好是金额。总而言之,金额已根据其之前的值进行了更新。新值存储在金额中,原始值只是被覆盖。

这是否在循环内并不重要。

额外奖励:如果你来自数学背景,那么像 amount = amount *(1 + rate)这样的表达看起来并不令人满意,因为这种表达在数学中简直是无意义的。为了解决这个问题,Python提供了一种更优雅(但完全等效)的语法:

amount *= 1 + rate

表示"通过右侧与#34;相乘来更新金额