闭包问题
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 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]