python的for循环,函数调用

for循环,为什么函数f1和f2的输出也是9,为什么f1的不是1和f2的输出不是4,有具体过程吗
img

看不清, 请用 ‘代码段’ 提交代码!

值传递,和地址传递的区分。
append(f)中的f 保存的是函数返回值的地址,
i为1时,地址比如为 0000001,此时对应的值为1
i为2时,地址依旧为 0000001,此时对应的值为4,在此时 fs中的fs[0] 也发生了变化,修改为4,
i为3时,地址依旧为 0000001,此时对应的值为9,在此时 ,fs[0],fs[1] 也发生变化,变成了9 。
查看地址,可以用id() 来验证

fs这个数组存储这三个函数分别被f1 f2 f3 接受到 我们知道这个时候 count里面的f函数没有调用 也就是里面的i没有获取值 我们又知道i在循环里面定义了值 作用域在count里面 是f函数的父级 因此最后i的值为三 因此当你调用f函数时 堆栈里面i的值为3 3x3就等于9 简单来说就是 f1 f2 f3的i值没有定义 会像上级查询i的值 而count在循环里面使用了i 且最后存储在堆栈里面的值为3

第7行改成fs.append(f()),12到14括号去掉,应该是你想要的结果,你这样写添加的是函数而不是返回值