首页 > 刚开始学Python,有一句看不懂。。。

刚开始学Python,有一句看不懂。。。

小弟今天刚开始看Python,

Pythondef count():
    fs = []
    for i in range(1, 4):
        def f(j):
            def g():
                return j*j
            return g
        r = f(i)
        fs.append(r)
    return fs
f1, f2, f3 = count()
print f1(), f2(), f3()

这个函数里面 f1, f2, f3 = count() 是啥意思啊


a,b,c = [1,2,3] 你的count()函数返回的是这种的吧[1,2,3],然后a=1,b=2,c=3了,这是简化赋值


count()函数返回fs这个列表,这个列表本身包含三个item。

 f1, f2, f3 = count()

表示对列表解包。等价于

f1, f2, f3 = [1, 2, 3]

即 ,f1 = 1, f2 = 2, f3 = 3

原文的items是一些闭包函数。


count是上面那个函数
f1, f2, f3 = count()是用三个变量接收函数返回的数组(直接接收数组中的元素了)


@sorashiro
额,我也是新手一枚,看到这段代码,我也有一句看不懂的地方,求问:
r = f(i) 这句代码,为什么没有执行f(j)函数呢?
我跟着代码脑子里走了一遍得到的答案是print:1,16,81
原因是我认为r = f(i)这句代码执行了f(j)函数,我在电脑里运行了一遍发现自己是错的,就不明白这里这句了:为什么r = f(i)没有执行f(j)函数呢?


这个是python的多指返回,count()函数返回的是一个函数的列表,列表的值有三个,分别是f(1), f(2), f(3),赋值给了对应的f1,f2,f3,然后print的时候执行了函数,得到的是1,4,9


首先回答f1,f2,f3=count()是什么意思。因为count()函数返回的是一个列表,python允许你将列表赋给多个变量,只要列表长度跟变量数相等。
其次,来讲为什么是1,4,9。这与函数的闭包有关,简单的讲是内部函数有记忆功能,它记住外部函数给它的参数。
所以f1,f2,f3接收列表后并没有马上执行,等到f1(),f2(),f3()被调用后,它们都同时会去执行j*j。

【热门文章】
【热门文章】