Discuss / Python / 关于闭包出count函数的疑问,请各位给小白一个解答

关于闭包出count函数的疑问,请各位给小白一个解答

Topic source

在闭包处的第一个count函数,我调用一次count函数,一次执行到for循环,for循环结束以后才会返回fs,那么我理解为fs是一个包含三个函数的列表,每个函数分别计算1乘以1,2乘以2,3乘以3。那么得到的输出结果应该是1,4,9才对。有朋友看到了能给我一下解答吗,谢谢

是以这样的方式已经计算,问题是,反回的FS是一个包含三个函数的列表,而不是一个包含三个“函数值”的列表,所以,会在调用f函数的时候才会进行计算,此时i已经为3了,所以结果会是9,9,9 如果按你说的那种思路,可以直接用fs.append(f()),这样就变成一个包含三个“函数值”的列表,直接用print(f1)就可以进行输出,而不需再用print(f1())

谢谢您的回复,我还想追问一点,fs是包含三个计算函数值的函数。那么这里我的理解是在进行一次调用的时候,即f1=count(),f1()后将会直接输出一个列表fs=[9,9,9]才对。逻辑上还是没有转过来,还请您再指点我一下

你这里可能在列表的认识上有一点偏差,源码中的 f1, f2, f3 = count() f1,f2,f3其实表示的是一个函数f = count(),在调用函数f()后生成的一个列表的三个元素。而并不是三个列表。 我在在IDLE中尝试了f1, f2, f3, f4 = count()和f1, f2= count()发现会报错。上网查过之后发现这个问题。 对一个非空列表f而言,可以用相等数量的变量依次排列使其等于f,例如:f1,f2,f3……fn = [x1,x2,x3……xn],则f1到fn依次表示列表中第1到第n个元素。 特别的当变量个数多余元素个数,会报错 ValueError: not enough values to unpack 变量个数少于元素个数,会报错 ValueError: too many values to unpack 但在这之后,我尝试使用f = count(),但在执行f()时又发生了错误 <em>Traceback (most recent call last): File "<pyshell#63>", line 1, in <module> f() TypeError: 'list' object is not callable</em> 查询之后我仍对此深感不解。 希望我上面的内容对你有所帮助。下半部分如果你有所了解,也希望不吝赐教。

解答后半部分,源代码中,fs = []......return fs ,可以看出,实际返回的是一个列表,用f1,f2,f3接收,相当于是将列表遍历,将里面的值赋给f1,f2,f3,也就是源代码中def f这个函数引用,但是当你用f1=count()hou ,f1实际上是一个列表[f,f,f],列表当然是不可以通过加括号的方法进行调用,可以尝试用for循环调用下 for f in f1: f()

十分感谢两位 将我的问题清楚的解决了 谢谢

幻夜201009

#7 Created at ... [Delete] [Delete and Lock User]

如果让f=count(),f其实是一个包含三个闭包地址的list,如果要使用list里面的闭包,可以通过fi的形式


  • 1

Reply