Return 함수, 간단히 말하면 반환 값이 함수입니다.
함수를 반환하고, 반환된 함수가 호출될 때만 결과가 반환됩니다.
"클로저"라 불리는 반환 함수에 관련 매개변수와 변수가 저장됩니다.
def returnre(a, b): def re(): return a + b return re test01 = returnre(1, 2) test02 = returnre(1, 2) print(test01 == test02) # 每次调用都会返回新生成的函数
예를 들어 위 예제의 re 함수 클로저 기능은 비전역 범위에 중첩된 함수가 정의된 닫힌 네임스페이스를 기억할 수 있습니다.
예제를 살펴보겠습니다:
def closur(a): def myprint(): print(a) return myprint test = closur(1) test()
코드 분석:
변수 a는 함수 클로저의 로컬 변수이며 함수가 실행될 때만 존재해야 하지만, 클로저 기능으로 인해 a의 값을 반환 함수로 캡슐화합니다.
def closuretest02(*args): f = [] for i in args: def test(): return i**2 f.append(test) return f test = closuretest02(1,2,3,4) for i in test: print(i())
返回闭包时牢记的一点就是:
返回函数不要引用任何循环变量,或者后续会发生变化的变量。
如果一定要引用循环变量怎么办?
方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变:
def count(): def f(j): def g(): return j*j return g fs = [] for i in range(1, 4): fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f() return fs
再看看结果:
f1, f2, f3 = count() print(f1()) print(f2()) print(f3())
注:
缺点是代码较长,可利用lambda函数缩短代码。
一个函数可以返回一个计算结果,也可以返回一个函数。返回一个函数时,牢记该函数并未执行,返回函数中不要引用任何可能会变化的变量。
nonlocal
nonlocal适用于嵌套函数中内部函数修改外部变量的值。
def outside(): a = 1 print('outside' + str(id(a))) def inside(): nonlocal a print('inside ' + str(id(a))) inside() outside()
因为使用nonlocal后,返回了闭包中有父函数的变量,所以父函数那里不会被回收。
本文基于Python基础,介绍了返回函数。常见的返回函数的应用。函数作为返回值,闭包在实际应用中需要的点,遇到的难点,提供有效的解决方案。使用Python语言,能够更好的理解。
위 내용은 기사에서는 Python 반환 함수를 안내합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!