기사에서는 Python 반환 함수를 안내합니다.

풀어 주다: 2023-07-25 16:48:31
앞으로
847명이 탐색했습니다.

1. 반환 기능이란 무엇입니까?

Return 함수, 간단히 말하면 반환 값이 함수입니다.

함수를 반환하고, 반환된 함수가 호출될 때만 결과가 반환됩니다.


2. 클로저 (반환 함수 형태로 구현)

"클로저"라 불리는 반환 함수에 관련 매개변수와 변수가 저장됩니다.

def returnre(a, b):
    def re():
        return a + b


    return re


test01 = returnre(1, 2)
test02 = returnre(1, 2)
print(test01 == test02)  # 每次调用都会返回新生成的函数
로그인 후 복사

기사에서는 Python 반환 함수를 안내합니다.

예를 들어 위 예제의 re 함수 클로저 기능은 비전역 범위에 중첩된 함수가 정의된 닫힌 네임스페이스를 기억할 수 있습니다.

예제를 살펴보겠습니다:

def closur(a):
    def myprint():
        print(a)


    return myprint


test = closur(1)
test()
로그인 후 복사

기사에서는 Python 반환 함수를 안내합니다.

코드 분석:

변수 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())
로그인 후 복사

기사에서는 Python 반환 함수를 안내합니다.

返回闭包时牢记的一点就是:

返回函数不要引用任何循环变量,或者后续会发生变化的变量。

如果一定要引用循环变量怎么办?

方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变:

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())
로그인 후 복사

기사에서는 Python 반환 함수를 안내합니다.

注:

缺点是代码较长,可利用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语言,能够更好的理解。

위 내용은 기사에서는 Python 반환 함수를 안내합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:Go语言进阶学习
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿