Discuss / Python / 求解

求解

Topic source

遗忘的rrtt

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

我没太搞懂增加一层函数g的意义是什么。不增加也可以做到输出1,4,9啊。像这样:

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

输出也是1,4,9啊

---泽鑫

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

试一试输出type(f1) 结果是int不是function 所以加一层g()是为了封装

秋雨mac

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

同意---泽鑫的说法 注意廖老师两次代码的写法:

  1. 不带参数的闭包函数f()

     def count():
         fs = []
         for i in range(1, 4):
             def f():
                  return i*i
             fs.append(f) #注意到这里f是作为一个函数加入的
         return fs
    
     f1, f2, f3 = count()
    

    如注释说明,此时fs.append(f)每次加进去的是一个函数。

  2. 带参数的f(i)

     def count():
         def f(j):
             def g():
                 return j*j
             return g
         fs = []
         for i in range(1, 4):
             fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f()
         return fs
    

    我的理解:此处,fs.append(f(i))传入的f(i)会首先被进行函数计算,然后f(i)的返回值,也就是函数g作为fs.append()的参数传入,所以最终传入的参数是函数g,仍是一个函数。

  3. 答主的写法

     def count():
         def f(j):
             return j*j
         fs = []
         for i in range(1, 4):
             fs.append(f(i)) #按照2的分析,此处传入的参数完全是一个数字
         return fs
     f1,f2,f3=count()
     print(f1)
     print(f2)
     print(f3)
    

    如注释所分析的,按照2的分析进行展开,最终fs.append()接收到的参数是f(i)的返回值,也就是一个数字。所以答主下面的输出直接是print(f1)而不是print(f1()),表明这时f1完全是个数字。


  • 1

Reply