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

返回不是太理解

def count():
    fs = []
    for i in range(1, 4):
        def f():
             return i*i
        fs.append(f)
    return fs

f1, f2, f3 = count()

在执行完f1,f2,f3 = count()后,f1,f2,f3为啥对应的是fs列表的三个值,而不是f1,f2,f3分别对应fs整个列表呢?

正在回答

4 回答

https://img1.sycdn.imooc.com//5c5c116e0001885f04270358.jpg

写了一段小程序验证一下,f1,f2,f3确实是分别对应list中的三个数,如果写成a1,a2,a3,a4 = count()报错显示expected 4, got 3。而写成f=count(),f才是一个list

另外 fs.append(f)说明返回的list fs中是三个f,所以f1,f2,f3分别对应一个f,调用的时候使用f1(),f2(),f3()

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

我是小白,这是自己的理解,不一定正确,希望有大神指正



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

def count():

    fs = []

    for i in range(1, 4):

        def f(i):

            return i*i

        fs.append(f(i))

    return fs


f1 = count()#返回的列表中是【1,4,9】

print (f1) #此处不可用f1(),因为是列表,列表不能像函数一样调用

f2 = count()#返回的列表中是【1,4,9】

print (f2)

f3 = count()#返回的列表中是【1,4,9】

print (f3)


f1, f2, f3 = count()#返回的是一个列表【1,4,9】

print (f1, f2, f3)#列表中的3个元素依次被打印出来1,4,9

##f1, f2, f3 = count(),此处只返回了1个列表,列表中的元素依次是f1,f2,f3,即【1,4,9】!所以上面的print (f1, f2, f3)代表print(fs[0] ,fs[1],  fs[2])

##与f1 = count(),f2 = count(),f3 = count()意思不同,这代表着分别返回3个列表,三个列表都是【1,4,9】

def count():

    fs = []

    for i in range(1, 4):

        def f(i):

            return i*i

        fs.append(f)

    return fs


f1 = count()#返回的列表中是三个f的地址,因为for中循环了3次

print (f1) #此出不可用f1(),因为是列表,列表不能想函数一样调用


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

JefferyZ

我不确定,但是我和你的理解一样。
2019-01-22 回复 有任何疑惑可以回复我~

你看仔细一点,f1,f2,f3对应的就是三个函数,只是打印的时候执行了

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

举报

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

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

进入课程

返回不是太理解

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