>  기사  >  백엔드 개발  >  Python 함수형 프로그래밍: 함수 반환 및 익명 함수

Python 함수형 프로그래밍: 함수 반환 및 익명 함수

WBOY
WBOY앞으로
2023-04-12 14:37:201293검색

Python 함수형 프로그래밍: 함수 반환 및 익명 함수


Return 함수

소위 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제