소위 return 함수는 이름에서 알 수 있듯이 함수를 반환 값으로 사용하는 것입니다. 함수를 매개변수로 사용하는 것 외에도 고차 함수는 함수를 결과로 반환할 수도 있습니다. 가변 매개변수의 연속 곱셈을 구현해 보겠습니다. 구적 함수는 다음과 같이 정의할 수 있습니다.
def calc_fac(*args): fx = 0 for n in args: fx = fx * n return fx
구적 함수를 정의할 때 즉시 곱할 필요는 없지만 후속 계산을 기반으로 호출합니다. 이때, 함수의 결과를 반환할 수는 없고, 아래와 같이 함수 자체를 반환합니다.
def lazy_fac(*args): def fac(): fx = 0 for n in args: fx = fx * n return fx return fac
구적함수를 재정의한 후,lazy_fac()를 호출하면 반환되는 것은 구적법의 결과가 아닙니다. , 그러나 구적 함수:
>>> a=lazy_fac(1,2,3,4) >>> a <function lazy_fac.<locals>.fac at 0x002a5dr42>
그리고 함수 a가 호출되면 구적 프로세스가 실행됩니다.
>>> a() 24
이 예에서는 함수 fac를lazy_fac에 정의하고 fac는 내부 함수라고 할 수 있습니다. lazy_fac은 외부 함수입니다. 내부 함수 fac는 외부 함수의 매개변수와 지역 변수를 참조할 수 있습니다. 매개변수와 변수는 우리가 최종적으로 반환하는 내부 함수 fac에 저장됩니다. 이 프로그램 구조를 Python에서는 클로저라고 합니다.
클로저 구조에서는 함수가 결과로 반환되면 함수 프로세스가 즉시 실행되지 않고 a()를 호출한 후에 실행됩니다.
간단히 말해서, 함수형 프로그래밍에서는 함수가 계산 결과를 반환하는 것 외에도 실행되지 않은 함수를 반환할 수도 있습니다. 함수를 반환할 때 함수가 실행되지 않았음을 항상 기억하고, 반환된 함수에 변화를 일으킬 수 있는 루프 변수와 같은 변수를 도입하지 않도록 노력하십시오.
함수를 전달하거나 코드 구조가 너무 복잡한 경우 명시적인 함수 정의 대신 익명 함수를 사용할 수 있습니다. 이때 익명 함수를 사용하면 코드 구조가 크게 단순화되고 더욱 정교해집니다.
x3을 계산하기 위해 앞서 소개한 map 함수를 예로 들어보겠습니다. 익명 함수의 함수를 살펴보세요.
>>> list(map(lambda x: x * x * x, [1, 2, 3])) [1, 8, 27]
비교에서 알 수 있듯이 익명 함수 람다 x : x*x*x는 다음과 같습니다.
def f(x): return x * x * x
lambda와 동일합니다. 익명 함수 키워드로 콜론 앞의 x는 익명 함수의 매개변수를 나타냅니다. 익명 함수는 표현식을 하나만 가질 수 있으며, 함수 정의처럼 return을 작성할 필요가 없습니다. 익명 함수에는 함수 이름이 없기 때문에 사용 중에 함수 이름 충돌을 걱정할 필요가 없습니다. 함수 객체로서 익명 함수는 변수에 값을 할당하는 규칙도 준수합니다:
>>> fx = lambda x: x * x * x >>> fx <function <lambda> at 0x101c6ef28> >>> f(4) 64
마찬가지로 함수로서의 익명 함수는 반환 함수로도 사용할 수 있습니다:
def f(x): return lambda: x * x * x
위 내용은 Python 함수형 프로그래밍: 함수 반환 및 익명 함수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!