我试图绕过以下函数和循环:
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循环或函数中?
感谢。
答案 0 :(得分:1)
调用函数时,python会创建一个"本地范围" (字典),以及存储变量的地方。每次调用函数时都会重新创建此作用域。第一步是将函数参数添加到本地,然后在使用时添加其他变量。您可以print(locals()["amount"])
随时查看正在发生的事情。一旦进入本地函数作用域,无论嵌套条件的深度如何,变量都会进入相同的作用域。此代码会不断重新分配amount
,以便每次循环使用新值。
答案 1 :(得分:0)
像这样的作业
amount = amount * (1 + rate)
表示以下内容:计算右侧的结果,这恰好涉及变量金额的值。计算完成后,结果存储在左侧的变量中。这恰好是金额。总而言之,金额已根据其之前的值进行了更新。新值存储在金额中,原始值只是被覆盖。
这是否在循环内并不重要。
额外奖励:如果你来自数学背景,那么像 amount = amount *(1 + rate)这样的表达看起来并不令人满意,因为这种表达在数学中简直是无意义的。为了解决这个问题,Python提供了一种更优雅(但完全等效)的语法:
amount *= 1 + rate
表示"通过右侧与#34;相乘来更新金额。