이 글은 Python의 클로저에 대한 간략한 소개를 제공합니다(예제 포함). 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
1: 소개
함수형 프로그래밍은 프로그램에 꼭 필요한 것은 아니지만 프로그램을 단순화하는 데 중요한 역할을 합니다.
Python의 모든 것은 객체이고 함수도 객체입니다
a = 1 a = 'str' a = func
2: 클로저
클로저는 함수와 관련 참조 환경(예: 클로저 = 함수 + 환경 변수)으로 구성된 엔터티입니다.
내부 함수, 외부 범위(전역 범위 아님)의 변수가 참조되면 내부 함수는 클로저로 간주됩니다. 이것이 가장 간단한 설명입니다! 그리고 이 변수의 값은 모듈의 동일한 변수 값으로 수정되지 않습니다!
세 번째: 클로저의 역할
전역 변수를 적게 사용하면 전역 변수 사용을 피할 수 있습니다.
함수 외부에서 함수 내부의 값을 호출할 수 있습니다.
print(f.__closure__[0].cell_contents)
# Return 클로저 패키지의 환경 변수 값!
모듈 작동이 불가능합니다!
# ----------------------------------------------# # 闭包 # ----------------------------------------------# # 函数内部定义函数 def curve_pre(): def curve(): print("抛物线") pass return curve # 不能直接调用函数内部的函数 # curve() func = curve_pre() func() def curve_pre1(): a = 25 # 环境变量a的值在curve1外部 def curve1(x): print("抛物线") return a * x ** 2 return curve1 # 返回了的闭包 f = curve_pre1() result = f(2) print(result) # 当在外部定义变量的时候,结果不会改变 a = 10 print(f(2)) print(f.__closure__) # 检测函数是不是闭包 print(f.__closure__[0].cell_contents) # 返回闭包中环境变量的值! # ----------------------------------------------# # 闭包的实例 # ----------------------------------------------# def f1(): m = 10 def f2(): m = 20 # 局部变量 print("1:", m) # m = 20 print("2:", m) # m = 10 f2() print("3:", m) # m = 10,臂包里面的值不会影响闭包外面的值 return f2 f1() f = f1() print(f.__closure__) # 判断是不是闭包 # ----------------------------------------------# # 闭包解决一个问题 # ----------------------------------------------# # 在函数内部修改全局变量的值计算某人的累计步数 # 普通方法实现 sum_step = 0 def calc_foot(step=0): global sum_step sum_step = sum_step + step while True: x_step = input('step_number:') if x_step == ' ': # 输入空格结束输入 print('total step is ', sum_step) break calc_foot(int(x_step)) print(sum_step) # 闭包方式实现----->少使用全局变量,闭包可以避免 def factory(pos): def move(step): nonlocal pos # 修改外部作用域而非全局变量的值 new_pose = pos + step pos = new_pose # 保存修改后的值 return pos return move tourist = factory(0) print(tourist(2)) print(tourist(2)) print(tourist(2))
위 내용은 Python의 클로저에 대한 간략한 소개(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!