5258885 发表于 2019-11-13 00:35:26

闭包问题

def fun1(x):
    def fun2(y):
      z=x*y
      return z
    return fun2(y)
a=input('输入数字')
b=input('输入数字')
print(fun1(a)(b))
为什么报错y没定义

def fun1(x):
    def fun2(y):
      z=x
      return z
    return fun2
a=input('输入数字')
b=input('输入数字')
print(fun1(a)(b))
为什么这个就可以

jackz007 发表于 2019-11-13 00:48:17

本帖最后由 jackz007 于 2019-11-13 01:47 编辑

    如果是闭包的话,这句有问题:
    return fun2(y)

    只要改成下面这样就可以了:
    return fun2

    楼主再试试
def fun1(x):
    def fun2(y):
      return x * y
    return fun2
a=input('输入数字')
b=input('输入数字')
print(fun1(a)(b))
      为了与函数定义中的形式参数相呼应,fun1(a)(b) 实际上就是 fun1(x)(y)

      fun1(a) 把参数 a 作为 fun1() 的定义参数 x 传入 fun1(),并成为 fun1() 的局部变量,同时,也是内嵌函数 fun2() 的外部变量 x,调用结果是 return fun2,得到内嵌函数 fun2() 的调用地址。然后,fun1(a)(b) 实际上完成以 b 为定义参数 y,对 fun2() 的调用,这样,在 fun2() 内部,x 和 y 变量已经齐备,完全可以正常运作,不存在任何的问题。
      
页: [1]
查看完整版本: 闭包问题