把函数作为参数传⼊,这样的函数称为⾼阶函数,⾼阶函数是函数式编程的体现。函数式编程就是指这种⾼度抽象的编程范式。
1.1 体验⾼阶函数
在Python
中,
abs()
函数可以完成对数字求绝对值计算。
abs(-10) # 10
round() 函数可以完成对数字的四舍五⼊计算。
语法结构:
round(number,num_digits)
参数:
- number:需要四舍五入的数
- digits:需要小数点后保留的位数
返回值:
- 指定的位数大于 0,返回四舍五入到指定的小数位;
- 指定的位数等于 0,返回四舍五入到最接近的整数,保留整数部分;
- 指定的位数小于 0,对整数部分进行四舍五入,返回的结果是浮点数。
示例代码1:
round(1.2) # 1
round(1.9) # 2
示例代码2:
s = 1.2356789
# 指定的位数大于 0,返回四舍五入到指定的小数位
ret1 = round(s, 3) # 保留3位小数
print(ret1)
# 指定的位数等于 0,返回四舍五入到最接近的整数,保留整数部分
ret2 = round(s, 0)
print(ret2)
ret3 = round(s) # 默认返回四舍五入后的整数
print(ret3)
# 指定的位数小于 0,对整数部分进行四舍五入,返回的结果是浮点数
ret4 = round(-s, 3)
print(ret4)
ret5 = round(-s) # 默认返回四舍五入后的整数
print(ret5)
运行结果:
需求:任意两个数字,按照指定要求整理数字后再进⾏求和计算。
⽅法
1:
def add_num(a, b):
return abs(a) + abs(b)
result = add_num(-1, 2)
print(result) # 3
⽅法
2:
def sum_num(a, b, f):
return f(a) + f(b)
result = sum_num(-1, 2, abs)
print(result) # 3
注意:两种⽅法对⽐之后,发现⽅法
2
的代码会更加简洁,函数灵活性更⾼。
函数式编程⼤量使⽤函数,减少了代码的重复,因此程序⽐较短,开发速度较快。
1.2 内置⾼阶函数
1.2.1 map()
map(func, lst),将传⼊的函数变量
func
作⽤到
lst
变量的每个元素中,并将结果组成新的列表
(Python2)/ 迭代器(Python3)
返回。
需求:计算
list1
序列中各个数字的
2
次⽅。
示例代码1:
list1 = [1, 2, 3, 4, 5]
def func(x):
return x ** 2
result = map(func, list1)
print(result) #
print(list(result)) # [1, 4, 9, 16, 25]
运行结果:
更多map()函数使用方法,详见博文:python中map()函数使用方法_IT之一小佬的博客-CSDN博客_map函数的用法python
1.2.2 reduce()
reduce(func,
lst)
,其中
func
必须有两个参数。每次
func
计算的结果继续和序列的下⼀个元素做累积计算。
注意:
reduce()
传⼊的参数
func
必须接收
2
个参数。
需求:计算
list1
序列中各个数字的累加和。
示例代码1:
import functools
list1 = [1, 2, 3, 4, 5]
# 方法一
def func(a, b):
return a + b
result = functools.reduce(func, list1)
print(result) # 15
# 方法二
result2 = functools.reduce(lambda x, y: x + y, list1)
print(result2)
运行结果:
示例代码2:
import functools
list1 = [1, 2, 3, 4, 5]
# 方法一
def func(a, b):
return a * b
result = functools.reduce(func, list1)
print(result) # 15
# 方法二
result2 = functools.reduce(lambda x, y: x * y, list1)
print(result2)
运行结果:
示例代码3:
import functools
list1 = [1, 2, 3, 4, 5]
list2 = [1, 1, 1, 1, 1]
list3 = [0, 0, 0, 0, 0]
list4 = [0, 0, 0, 0, 1]
result1 = functools.reduce(lambda x, y: x & y, list1)
result2 = functools.reduce(lambda x, y: x & y, list2)
result3 = functools.reduce(lambda x, y: x | y, list3)
result4 = functools.reduce(lambda x, y: x | y, list4)
print(result1)
print(result2)
print(result3)
print(result4)
运行结果:
更多reduce()函数使用方法,详见博文:
python中reduce()函数用法详解_IT之一小佬的博客-CSDN博客
1.2.3 filter()
filter(func, lst)函数⽤于过滤序列,
过滤掉
不符合
条件的元素
,
返回⼀个
filter
对象。如果要转换为列表
, 可以使⽤ list()
来转换。
示例代码1:
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def func(x):
return x % 2 == 0
result = filter(func, list1)
print(result) #
print(list(result)) # [2, 4, 6, 8, 10]
运行结果:
示例代码2:
lst = ['', 'abc', [], [1, 2, 3], {}, {'name': 'zhangsan'}]
def len_fun(tmp):
if len(tmp) != 0:
return tmp
result = filter(None, lst)
print(result)
for i in result:
print(i, end=' ')
print()
result2 = filter(len_fun, lst)
print(result2)
for i in result2:
print(i, end=' ')
运行结果: