【问题标题】:Where is the new value created from the for loop stored?从 for 循环创建的新值存储在哪里?
【发布时间】:2014-09-19 00:12:55
【问题描述】:

我想了解以下函数和 for 循环:

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 循环还是函数中?

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这样的作业

      amount = amount * (1 + rate)
      

      意思如下:计算右边的结果,恰好涉及到变量amount的值。计算完成后,结果将存储在左侧的变量中。这恰好是金额。总而言之,金额已根据其之前的值进行了更新。新值存储在 amount 中,原始值被简单地覆盖。

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

      奖励:如果你有数学背景,像 amount = amount * (1 + rate) 这样的表达式看起来并不顺眼,因为这种表达式在数学中简直是无稽之谈。为了解决这个问题,Python 提供了一种更优雅(但完全等效)的语法:

      amount *= 1 + rate
      

      这意味着“通过乘以右侧来更新金额”。

      【讨论】:

        猜你喜欢
        • 2017-01-06
        • 2023-01-03
        • 2013-12-07
        • 2015-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多