이 기사에서는 Python 클로저가 무엇인지 설명합니다. Python 클로저에 대한 간략한 소개(예제 포함)에는 특정 참고 가치가 있습니다. 도움이 필요한 친구가 참고할 수 있기를 바랍니다.
폐쇄란 무엇인가요?
사실 함수를 사용할 때 실수로 클로저가 실행됩니다. 어떤 이유에서인지 상위 레이어 함수의 변수는 항상 함수 내에서 참조되거나 수정되기 때문입니다.
그럼 클로저란 무엇인가요? 실제로 함수가 중첩될 때 발생하는 규칙인데, 이 규칙은 현재 함수가 이전 함수의 로컬 네임스페이스에 있는 변수를 참조하고 함수 자체가 객체로 반환될 때 발생합니다.
클로저를 발생시키는 함수를 클로저 함수라고 합니다
클로저의 가장 큰 특징은 외부 함수에 의해 반환된 후 변수에 할당될 수 있다는 점이며, 외부 함수의 내용을 전달합니다. 정의된 변수
의 예는 다음과 같습니다.
def func1(): a = 2 #变量a为函数func1()开辟的局部命名空间内定义的变量 def func2(x): return x**a #函数fun2()内引用了变量a print('func2的id:',id(func2)) return func2 #内层函数名被当作返回值,此时闭包规则达成。 res = func1() # 此时res等同于func2,我们可以看看他们的id完全相同 print('res的id: ',id(res)) print(res(3)) del func1 print('删除函数func1之后:',res(5)) print(res.__closure__) print(type(res.__closure__[0])) print(res.__closure__[0].cell_contents) #此时,如果函数func2()没有引用外部函数变量a,我们可以试着把return x**a这句改成return x,这时函数func2就没有触发闭包规则 #此时如果再次打印res.__closure__,你会发现输出值为None
아래 출력 결과에서 볼 수 있듯이 func1 함수가 삭제되더라도 이론적으로 사라져야 할 변수 a는 계속 사용할 수 있습니다(이론적으로 a에 해당하는 로컬 공간이 사라지면 a는 사라져야 합니다). 변수 a를 계속 참조할 수 있는 이유는 로컬 변수 때문입니다. 외부 함수가 반환된 경우에도 내부 함수에서 외부 함수를 참조할 수 있습니다.
사실 함수 자체도 객체이고 객체에는 많은 속성이 있는데, 그 중 클로저와 관련된 속성이 closure 속성입니다.
closure 속성은 셀 개체를 포함하는 튜플을 정의합니다. 여기서 튜플의 각 셀 개체는 범위의 변수 값을 저장하는 데 사용됩니다.
func2的id: 139940709362136 res的id: 139940709362136 9 删除函数func1之后: 25 #我们来打印一下res的__closure__属性,可以看出它是由cell对象组成的元组 (<cell at 0x7f467c4a8558: int object at 0x5654c2553a40>,) <class 'cell'> #打印类型结果就是元组 2 #打印cell中的值可以看出,这个cell对象中存储的变量值为2
클로저를 실행한 후 로컬 공간에 의존하지 않고 상위 로컬 네임스페이스 변수를 참조하는 것이 가능합니다. 변수가 위치한 함수가 삭제되더라도 클로저 함수는 계속 작동할 수 있습니다. 실제로 클로저 함수는 이를 __closure__ 속성에 저장합니다.
위 내용은 파이썬 클로저란 무엇입니까? Python 클로저에 대한 간략한 소개(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!