>  기사  >  백엔드 개발  >  Python 클로저가 실행될 때 값이 전달되는 방법

Python 클로저가 실행될 때 값이 전달되는 방법

不言
不言원래의
2018-06-04 11:16:321303검색

이 글에서는 주로 Python 클로저 실행 시 값 전달 방식을 소개합니다. Python 클로저 실행의 값 전달 원리와 구현 방법을 예제 형식으로 분석하여 필요한 친구들이 쉽게 이해할 수 있도록 코드를 더 자세히 설명합니다. 참고,

이 기사의 예는 Python 클로저 실행 중 값 전송 방법을 분석합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

코드의 문제 및 문제에 대한 설명.

#!/usr/bin/python
#coding: utf-8
# 判断一个人是否及格,如果满分150,则90及格,如果满分100,则60及格
# 开始的疑惑:当fun函数执行完以后,对应的val的值就应该消失,但是,
# 当下面代码再次调用f(60)的时候(这个f()函数就是fun_c()函数)
# 却能够打印出val的值???
def fun(val):
  'val是得到的分数'
  # 打印此时存储的val的地址
  print("%x" % id(val))
  def fun_c(passline):
    'passline是及格线'
    if val >= passline:
      print("通过")
    else:
      print("不及格")
  return fun_c
f = fun(89) # f就是fun_c函数
# 利用__closure__打印出fun_c()函数的属性,可以发现f中第一个元素的id值和val的id值地址相同
# 这说明如果引用了外部的变量(enclosing变量)的话,会将这个变量添加到函数属性中
# 当再次进行查找(即f(60))的时候,并不是到代码中去查找,而是到函数属性中去查找
# 也就是上面的fun_c的属性中有val的值,是一个元组,不能够改变
print(f.__closure__)
f(60)
f = fun(89)
f(90)

실행 결과:

12ee0b0
(<cell at 0x017B24B0: int object at 0x012EE0B0>,)
通过
12ee0b0
不及格

클로저의 역할:

1. 코드 캡슐화

2. 코드 재사용

관련 권장 사항:

Python 클로저 메커니즘에 대한 심층적인 이해

카운터 구현을 위한 Python 폐쇄 방법

위 내용은 Python 클로저가 실행될 때 값이 전달되는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.