Python3快速入门——(10)函数式编程(Functional Programming)

简介: #函数本身也可以赋值给变量,即:变量可以指向函数f=abs #abs()和f()等价了 变量可以指向函数,函数名也是变量g=f(-10) #10#变量可以指向函数,函数的参数能接收变量,...
#函数本身也可以赋值给变量,即:变量可以指向函数
f= abs #abs()和f()等价了 变量可以指向函数,函数名也是变量
g=f(- 10 ) #10
#变量可以指向函数,函数的参数能接收变量,那么 一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数
def add(x,y,f): #简单的高阶函数
return f(x)+f(y)
g=add(- 1 , 5 , abs ) #6

(1)高阶函数
#map函数
#map()函数接收两个参数,一个是函数,一个是Iterable
# map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回
L=[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]
def f(x):
return x*x
r= map (f,L) #map()传入的第一个参数是f,即函数对象本身。
m= list (r) #由于结果r是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list
print (m) #[1, 4, 9, 16, 25, 36, 49, 64, 81]
r= map ( str ,L) #把列表L的所有数字转化为字符串
#reduce函数
#reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,
# reduce把结果继续和序列的下一个元素做累积计算
from functools import reduce
L=[ 1 , 2 , 3 , 4 , 5 ]
def add(x,y):
return x+y
m=reduce(add,L) #15
#定义一个字符串转整数的函数(str2int)\
from functools import reduce
DIGITS={ '0' : 0 , '1' : 1 , '2' : 2 , '3' : 3 , '4' : 4 , '5' : 5 , '6' : 6 , '7' : 7 , '8' : 8 , '9' : 9 }
def str2int(s):
def fn(x,y):
return 10 *x+y
def char2num(s):
return DIGITS[s]
return reduce(fn, map (char2num,s))
#filter()函数用于过滤序列
#filter()也接收一个函数和一个序列
#filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素
def is_odd(n): #定义一个函数,在一个list中,删掉偶数,只保留奇数
return n% 2 == 1
m= list ( filter (is_odd,[ 1 , 2 , 3 , 4 , 5 , 6 , 7 ])) #[1, 3, 5, 7]
#filter()函数返回的是一个Iterator,也就是一个惰性序列,
# 所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list
#sorted()函数排序函数
#可以接收一个key函数来实现自定义的排序
L=[ 11 , 2 , 4 ,- 12 ,- 15 , 17 ]
m= sorted (L) #[-15, -12, 2, 4, 11, 17]
m= sorted (L, key = abs ) #按绝对值大小排序,并按照对应关系返回list相应的元素[2, 4, 11, -12, -15, 17]
S=[ 'Bob' , 'Ann' , 'cll' , 'Zmm' , 'alt' ]
s= sorted (S) #对字符串排序,是按照ASCII的大小比较的['Ann', 'Bob', 'Zmm', 'alt', 'cll']
s= sorted (S, key = str .lower) #实现忽略大小写的排序['alt', 'Ann', 'Bob', 'cll', 'Zmm']
s= sorted (S, key = str .lower, reverse = True ) #进行反向排序['Zmm', 'cll', 'Bob', 'Ann', 'alt']

(2)匿名函数
#lambda匿名函数
#匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果
L=[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]
m= list ( map ( lambda x:x*x,L)) #关键字lambda表示匿名函数,冒号前面的x表示函数参数
print (m) #[1, 4, 9, 16, 25, 36, 49, 64, 81]

(3)partial偏函数
#partial偏函数
#functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数
import functools
int2=functools.partial( int , base = 2 ) #二进制转换为十进制整数
m=int2( '10000' ) #16







相关文章
|
3月前
|
Python
python3之flask快速入门教程Demo
python3之flask快速入门教程Demo
58 6
|
3天前
|
Python
Python函数式编程-Filter
Python函数式编程-Filter
|
3月前
|
SQL 算法 数据挖掘
动态规划Dynamic programming详解-编辑距离问题【python】
动态规划Dynamic programming详解-编辑距离问题【python】
|
1月前
|
Python
Python函数式编程:你真的懂了吗?理解核心概念,实践高阶技巧,这篇文章带你一次搞定!
【8月更文挑战第6天】本文介绍了Python中的函数式编程,探讨了高阶函数、纯函数、匿名函数、不可变数据结构及递归等核心概念。通过具体示例展示了如何利用`map()`和`filter()`等内置函数处理数据,解释了纯函数的一致性和可预测性特点,并演示了使用`lambda`创建简短函数的方法。此外,文章还强调了使用不可变数据结构的重要性,并通过递归函数实例说明了递归的基本原理。掌握这些技巧有助于编写更清晰、模块化的代码。
19 3
|
2月前
|
存储 分布式计算 索引
Python函数式编程入门窥探
Python本身不是一门函数式编程语言,但是它参考了一些函数式编程语言很好的地方,除了可以写出更可读的代码外。还能用它来实现一些特定功能,本身也提供了强大的注解系统和函数和对象之间的灵活调用。
|
2月前
|
网络协议 关系型数据库 数据挖掘
python小白快速入门教程
Python是一种解释型、面向对象、动态数据类型的高级编程语言。
40 1
|
2月前
|
缓存 并行计算 Shell
12种增强Python代码的函数式编程技术
函数式编程是一种高度抽象的编程范式,它倡导使用纯函数,即那些不依赖于外部状态、没有可变状态的函数。在纯粹的函数式编程语言中,函数的输出完全由输入决定,因此相同的输入总是产生相同的输出,这样的函数我们称之为无副作用的。
|
3月前
|
Python
在Python中,`map()`, `filter()` 和 `reduce()` 是函数式编程中的三个核心高阶函数。
【6月更文挑战第24天】Python的`map()`应用函数到序列元素,返回新序列;`filter()`筛选满足条件的元素,生成新序列;`reduce()`累计操作序列元素,返回单一结果。
30 3
|
3月前
|
Serverless 开发者 Python
Python函数式编程:让你的代码更简洁、更高效!
【6月更文挑战第12天】Python函数式编程引入了数学函数概念,强调无副作用和不可变数据。特点包括高阶函数、Lambda表达式、map、filter和reduce。示例展示了如何使用map进行平方运算,filter筛选条件元素,reduce计算元素总和,体现其简洁高效。虽然不适用于所有情况,但函数式编程能提升代码可读性和可维护性。
21 3