直接上代码
def l(list):
def d():
return list
return d
#运行
l = l([1,2,3,4])
print l()
这个情况是正常的。
问题在于d函数为什么不能传入list,然后我现在尝试了一下这个代码:
def l(list):
def d(list):
return list
return d
#运行
l = l([1,2,3,4])
#提示错误
print l()
#正常
print l([1,3,5,7,9])
请问这个怎么解释呢?
我个人理解的是,类似于“继承”的情况,当d函数没有参数传入的情况上,基于父函数的参数,当他需要传参了,就覆盖了???
看看LEGB原则,就会明白是怎么回事。
https://zhuanlan.zhihu.com/p/...
运行
l = l([1,2,3,4])
提示错误
print l() 这个错误是你没有传参数。
原有代码中:
下面的用于说明:你原来代码中的 l 指向不同:
代码写成这样你可能就理解了:
最后说两点:
不要使用
list
这样的关键字作为变量名不要覆盖你的变量名(除非真的有必要)
楼主需要理解的是: 作用域
case 1: 函数l返回函数d的地址,d只做为返回值,并没有被调用执行.
参数list传入l,作用域在函数l内,可以被d访问(注意参数是传给l的,不是d).
如果要访问list.如下调用:
`