为了账号安全,请及时绑定邮箱和手机立即绑定

为什么循环体放在函数参数里就不会变了?

def count():

    fs = []

    for i in range(1, 4):

        ①a=i

        def f(②a=i):

            return a*a

        fs.append(f)

    return fs

f1, f2, f3 = count()

print f1(), f2(), f3()

为什么a=i放在1处是输出999放在2处就是输出149了。i是循环体会变所以我想让他固定下来,所以用了a=i,但是放在外面就没有用,放在函数参数里就可以了?十分疑惑,求大神解答!

正在回答

1 回答

这个函数类似于装饰器,在函数f1,f2,f3没有执行前,count()函数已经执行完了,若放在1处,count()函数执行完i和a已经变到3了,而且还没有传递到f()函数内部,之后执行f1(),f2(),f3()函数时,执行的f()函数都是a=3的结果,     若是放在2处,执行count()函数时,每次执行f()函数,a已经作为参数传递到f()函数内部了。   这样就会出现你这样的结果了

0 回复 有任何疑惑可以回复我~
#1

慕沐9422798 提问者

再问一下怎么才算将参数传递到函数内部呢?
2019-07-25 回复 有任何疑惑可以回复我~
#2

weibo_慕圣4053891 回复 慕沐9422798 提问者

引用该函数的时候,就会传递到函数内部了
2019-07-30 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

为什么循环体放在函数参数里就不会变了?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信