찾다

 >  Q&A  >  본문

python嵌套函数作用域怎么解释

直接上代码

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函数没有参数传入的情况上,基于父函数的参数,当他需要传参了,就覆盖了???

阿神阿神2778일 전580

모든 응답(3)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-18 10:25:18

    LEGB 원칙을 살펴보면 무슨 일이 일어나고 있는지 이해할 수 있을 것입니다.
    https://zhuanlan.zhihu.com/p/...

    달려

    l = l([1,2,3,4])

    프롬프트 오류

    print l() 이 오류는 매개변수를 전달하지 않았기 때문에 발생합니다.

    회신하다
    0
  • 迷茫

    迷茫2017-04-18 10:25:18

    원본 코드:

    으아악

    다음은 설명을 위해 사용됩니다. 원래 코드의 l은 다른 지점을 가리킵니다.

    으아악

    코드가 다음과 같이 작성되어 있으면 이해하실 수 있습니다.

    으아악

    두 가지 마지막 사항:

    1. list 같은 키워드를 변수 이름으로 사용하지 마세요

    2. 꼭 필요한 경우가 아니면 변수 이름을 덮어쓰지 마세요.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 10:25:18

    포스터가 이해해야 할 것은: 범위

    Case 1: 함수 l은 함수 d의 주소를 반환하고, d는 반환값으로만 사용되며 실행을 위해 호출되지 않았습니다.

    으아악

    매개변수 목록은 l에 전달되고 범위는 함수 l 내에 있으며 d에서 액세스할 수 있습니다(매개변수는 d가 아닌 l에 전달된다는 점에 유의하세요).
     
      목록에 액세스하려면 다음과 같이 호출하세요.
      
      `

    으아악 으아악 으아악 으아악 으아악

    회신하다
    0
  • 취소회신하다