# 实例3分析
def func1():
# 首先定义 func1 这个函数
ls=[]
# 接着定义 空的列表ls
for i in range(1,4):
# for循环,并分次把 1,2,3 赋值给变量 i
for i in range(1,4):
def func2():
return i*2
ls.append(func2)
return ls
# 红色的部分为 for 循环的内部语句,for 循环的次数为3次。首先 for 每次循环都要创建新的函数 func2,函数的返回值为 变量 i * 2。函数创建完毕后,接着运行 ls.append(func2),添加的值为函数,并不是直接添加计算结果。for 循环完毕后,返回列表 ls。最后把函数 func1 的返回值分别赋值给 a1,a2,a3。
# 以上是程序的运行过程,我们接着来说内部的运行逻辑。当然,主要是红色部分的代码。
for i in range(1,4):
def func2():
return i*2
ls.append(func2)
# 首先,for 循环生成了 i=1 的变量,开始第一次循环,创建一个新的函数func2,接着运行ls.append(func2),向列表 ls 添加一个元素,这个元素是一个函数 fun2,但是函数并没有运行起来,而是相当于 "挂" 起来了,就此第一次循环完毕。
# 接着第二次循环,i=2,创建一个新的函数 func2,接着想 ls 添加函数 func2,和第一次一样,函数并没有运行,第二次循环完毕。
# 第三次循环 i =3,创建一个新的函数 func2,接着想 ls 添加函数 func2,和第一次一样,函数并没有运行,第三次循环完毕。
# 这时候,for 循环完,i 的值为3。接着返回列表 ls 。这时,函数 func1 也已经定义完。
# 运行 a1,a2,a3=func1(),把列表 ls 中的三个函数分别赋值给a1,a2,a3
# 接着运行 print(a1()) print(a2()) print(a3()),这时候的a1,a2,a3已经是代表的三个对应的函数。此时,函数 func2才真正的运行起来了,可 i 的值已经为3了。所以三个函数的输出值都为 6 。