您当前的位置: 首页 >  Python

IT之一小佬

暂无认证

  • 1浏览

    0关注

    1192博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

python高阶函数(abs()、round()、map()、reduce()、filter())

IT之一小佬 发布时间:2021-01-20 21:26:24 ,浏览量:1

        把函数作为参数传⼊,这样的函数称为⾼阶函数,⾼阶函数是函数式编程的体现。函数式编程就是指这种⾼度抽象的编程范式。

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='  ')

运行结果:

关注
打赏
1665675218
查看更多评论
立即登录/注册

微信扫码登录

0.0423s