>  기사  >  백엔드 개발  >  Python 함수형 프로그래밍에 대한 자세한 분석(코드 예제)

Python 함수형 프로그래밍에 대한 자세한 분석(코드 예제)

不言
不言원래의
2018-09-18 15:27:111663검색

이 기사는 Python 함수형 프로그래밍에 대한 자세한 분석(코드 예제)을 제공하며, 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

함수형 프로그래밍, 함수형 프로그래밍. Python은 함수형 프로그래밍을 부분적으로 지원합니다. 순수 함수형 프로그래밍의 경우 어떤 함수에 대해서도 입력이 확실하면 출력도 확실하므로 부작용이 없다고 할 수 있습니다.

1. 고차 함수

1. 변수는 함수를 가리킵니다.

우리는 함수의 계산 결과가 x = abs(-5)와 같은 변수에 할당될 수 있다는 것을 알고 있습니다. 코드>. <br>마찬가지로 변수는 <code>f = abs와 같은 함수를 가리킬 수도 있습니다.
변수가 함수를 가리키는 경우 abs(x)를 직접 호출하고 f(x)를 실행하여 반환되는 결과는 정확히 동일합니다. x = abs(-5)
同理,变量也可以指向函数,例如f = abs
如果一个变量指向了一个函数,那我们直接调用abs(x)与执行f(x)返回的结果是完全相同。

2、函数名也是变量

我们也可以把函数名看成是一个变量,例如abs()函数。执行语句abs=-5,之后调用abs(-5)就会报错,因为此时abs这个变量已经不指向绝对值函数了,而是指向一个整数-5。

3、函数作为形参

既然变量可以指向函数,函数也可以充当变量,那么一个函数就可以接收另外一个函数作为它自己的形式参数,即实现高阶函数。例如:

>>> def add(x , y ,  f ): # 把函数作为参数传入。
...     return f(x) + f(y)
>>> add (-5,-2,abs)
7

二、函数式编程的内建函数

1、map(func,seq)

  • 语法:map(func,seq),接收两个参数,一个是函数func,一个是可迭代对象。

  • 作用:将传入的func函数循环作用于seq序列的每个元素上,并返回新的可迭代对象。

  • 注意:map()函数返回的是一个<map object>,我们可以使用list()函数将所获得的结果以list形式返回。

举个栗子:用map()实现f(x)=x*x

>>> def f(x):
...     return x*x
...
>>> map(f,[1,2,3,4,5])
<map object at 0x0327F670>
>>> list(map(f,[1,2,3,4,5]))     # 传入的函数f作用于序列的每个元素调并用list()
[1, 4, 9, 16, 25]

当然还可以使用其他方法实现:
exp1:list( map((lambda x:x*x),[1,2,3,4,5]))
exp2:[x*x for x in [1,2,3,4,5]]

2、reduce(func,list)

  • 语法reduce(func,list),必须接受两个参数。

  • 作用:把func函数作用在list序列上[x1,x2,x3,...]。取出序列的头两个元素x1x2,作用于func,取的一个单一的值,例如a,再将a与序列的下一个元素x3func运算,依此反复。其效果就相当于reduce(f,x1,x2,x3)=f(f(x1,x2),x3)

  • 注意:使用reduce(),必须导入模块from functools import reduce

大家可以自己找个栗子玩玩哈~~~

3、filter()

  • 语法filter(func,[序列]),接收一个“过滤”函数,和一个序列。返回的是一个Iterator可迭代对象。

  • 作用:按照func规则过滤序列,filter()把传入的函数func依此作用于每个元素,然后根据返回值TrueorFalse,来保留为True的对应元素。

  • 注意:跟map()类似,filter()返回的是一个可迭代对象,故需要使用list()来查看所获得结果并返回list

  • 2. 함수 이름도 변수입니다

abs() 함수와 같이 함수 이름도 변수로 간주할 수 있습니다. abs=-5 문을 실행한 다음 abs(-5)를 호출하면 abs 변수가 더 이상 가리키지 않기 때문에 오류가 보고됩니다. 함수는 절대값이지만 정수 -5를 가리킵니다.

🎜3. 형식 매개변수로서의 함수🎜🎜🎜변수는 함수를 가리킬 수 있고 함수도 변수로 작동할 수 있으므로 함수는 다른 함수를 자체 형식 매개변수로 받을 수 있습니다. 즉, 고차 함수를 구현할 수 있습니다. 예: 🎜
>>> def is_odd(n):
...     return n % 2 == 1  # 返回0(false) 或1(True)
...
>>> list( filter(is_odd,[1,2,3,4,5,6,7,8,9]) )
[1, 3, 5, 7, 9]
🎜🎜2. 함수형 프로그래밍의 내장 함수🎜🎜🎜🎜1, map(func,seq)🎜🎜
  • 🎜🎜Syntax🎜: map(func,seq)은 두 개의 매개변수를 받습니다. 하나는 func 함수이고 다른 하나는 반복 가능한 객체입니다. 🎜🎜
  • 🎜🎜Function🎜: seq 시퀀스의 각 요소에 대해 전달된 func 함수를 반복하고 새로운 반복 가능한 객체를 반환합니다. 🎜🎜
  • 🎜🎜Note🎜: map() 함수는 <map object>를 반환합니다. list() 함수를 사용하면 얻은 결과를 목록 형식으로 반환할 수 있습니다. 🎜🎜🎜🎜예: f(x)=x*x🎜rrreee🎜을 구현하려면 map()을 사용하세요. 물론 이를 구현하기 위해 다른 방법을 사용할 수도 있습니다.
    exp1:list( map( (lambda x:x *x),[1,2,3,4,5]))
    exp2:[1,2,3,4의 x에 대한 x*x ,5]]🎜🎜🎜2, 감소(func,list)🎜🎜<ul class=" list-paddingleft-2"> <li>🎜🎜Syntax🎜: <code>reduce(func,list) , 두 개의 매개변수를 허용해야 합니다. 🎜🎜
  • 🎜🎜Function🎜: list 시퀀스 [x1,x2,x3,...]func 함수를 적용합니다. . x1x2 시퀀스의 처음 두 요소를 꺼내 func에 대해 작업을 수행하고 a와 같은 단일 값을 가져옵니다. code>, 그런 다음 a와 시퀀스 x3의 다음 요소에 대해 func 작업을 수행하고 반복합니다. 효과는 reduce(f,x1,x2,x3)=f(f(x1,x2),x3)🎜🎜
  • 🎜🎜참고🎜: reduce( ), 모듈을 functools import Reduce에서 가져와야 합니다.🎜🎜🎜🎜가지고 놀 밤을 찾을 수 있습니다~~🎜🎜🎜3, filter()🎜🎜
    • 🎜🎜Syntax🎜: filter(func,[sequence])는 "필터" 함수와 시퀀스를 받습니다. 반환되는 것은 Iterator 반복 가능한 객체입니다. 🎜🎜
    • 🎜🎜Function🎜: func 규칙에 따라 시퀀스를 필터링하고 filter()는 그에 따라 전달된 함수 func를 적용합니다. . 각 요소는 반환 값 True 또는 False에 따라 True의 해당 요소로 유지됩니다. 🎜🎜
    • 🎜🎜참고🎜: map()과 유사하게 filter()는 반복 가능한 객체를 반환하므로 list() 를 사용하여 얻은 결과를 보고 <code>list 유형을 반환합니다. 🎜🎜🎜🎜예: 목록에서 짝수를 삭제하고 홀수를 유지합니다. 🎜rreee🎜🎜

위 내용은 Python 함수형 프로그래밍에 대한 자세한 분석(코드 예제)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.