直接上代码
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函数没有参数传入的情况上,基于父函数的参数,当他需要传参了,就覆盖了???
PHP中文网2017-04-18 10:25:18
LEGB 원칙을 살펴보면 무슨 일이 일어나고 있는지 이해할 수 있을 것입니다.
https://zhuanlan.zhihu.com/p/...
l = l([1,2,3,4])
print l() 이 오류는 매개변수를 전달하지 않았기 때문에 발생합니다.
迷茫2017-04-18 10:25:18
원본 코드:
으아악다음은 설명을 위해 사용됩니다. 원래 코드의 l은 다른 지점을 가리킵니다.
으아악코드가 다음과 같이 작성되어 있으면 이해하실 수 있습니다.
으아악두 가지 마지막 사항:
list
같은 키워드를 변수 이름으로 사용하지 마세요
꼭 필요한 경우가 아니면 변수 이름을 덮어쓰지 마세요.
PHP中文网2017-04-18 10:25:18
포스터가 이해해야 할 것은: 범위
Case 1: 함수 l은 함수 d의 주소를 반환하고, d는 반환값으로만 사용되며 실행을 위해 호출되지 않았습니다.
으아악 매개변수 목록은 l에 전달되고 범위는 함수 l 내에 있으며 d에서 액세스할 수 있습니다(매개변수는 d가 아닌 l에 전달된다는 점에 유의하세요).
목록에 액세스하려면 다음과 같이 호출하세요.
`