python:16 内置函数

内置函数

把函数作为形参传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现,函数式编程就是指这中高度抽象的编程范式

1 高阶函数

在学习高阶函数我们需要通过以下三个步骤去学习:

  1. 了解高阶函数如何书写,什么样的函数是高阶函数
  2. 体验高阶函数
  3. 体验高阶函数的作用

1.1 体验高阶函数

在 python 中,abs() 函数可以实现完成对数字求绝对值的计算

# 所谓的绝对值就是正数本身,如 -10 的绝对值就是 10
print(abs(-10))
[13:58:00 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
10

round() 函数可以完成对数字的四舍五入计算

print(round(10.2))
print(round(10.6))
[14:03:33 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
10
11

需求:

任意两个数字,按照指定要求整理数字后再进行求和计算,不管是负数还是正数都只去数字本身进行计算

  • 方法一:
def sum_num(a,b):
    # 返回时通过 abs 函数进行处理数据本身
    return abs(a) + abs(b)

print(sum_num(10,-2))
[14:03:40 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
12
  • 方法二:
# 但是再上面的方法一种,我们只能通过绝对值的方法实现,那么我像通过四舍五入实现的同时也可以实现绝对值数字的求和
# 传递 f 为函数的形参
def sum_num(a,b,f):
    return f(a) + f(b)

# 四舍五入计算
print(sum_num(10.2,11.9,round))

# 取出正数计算
print(sum_num(-10,-20,abs))
[14:13:56 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
22
30

注意:

两种方法对比后,发现方法二的代码会更简洁,函数灵活度更高

函数式编程大量使用函数,减少代码的重复,因此程序比较短,开发速度较快

2 三个常用内置函数

2.1 内置 map 函数

map(func, list),将传入的函数变量func作用到lst变量的每个元素中,在 python2 解释器中返回列表,python 3 解释器中返回一个迭代器

注意:

在工作中都是基于python3.5 往上的版本使用,所以我们只需要了解迭代器即可

'''
map 函数接收两个参数,1 为函数,2 为列表
正确书写了 map 之后,会将参数 1 的函数作用于参数 2 中的 list 序列中的每一个数据
在 python2 解释器中返回列表,python 3 解释器中返回一个迭代器
也就是说 map 函数在 py2 py3 不同的解释器中返回的数据是不同的
'''
map(func,list)

需求:

计算 list1序列各数字的 2 次方

'''
1.先传入 list
2.定义函数处理 2 次方即可
'''

# 定义列表
list1 = [1,2,3,4,5]

# 定义函数,实现 2 次方的处理
def func(x):
    return x ** 2

# 返回迭代器给 result 变量
result = map(func,list1)
print(result)

# 通过list 将result 数据输出并看到确实已经是 2 次方
print(list(result))
[14:27:52 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
<map object at 0x7f62c1277ee0>
[1, 4, 9, 16, 25]

2.2 reduce() 函数

reduce(func,list),其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累积计

注意:

reduce()传入的参数func必须接收2个参数

需求: 计算 list1 序列中各个数字的累加和。

'''
1.import 导入模块
2.定义功能函数
3.调用 reduce 作用:功能函数计算的结果和序列的下一个数据做累计相加
'''

# 导包 functools
import functools

list1 = [1,2,3,4,5]

# 定义函数实现返回 a+b ,用于下面 functools.reduce 使用的功能函数
def func(a,b):
    return a + b

'''
functools.reduce:
reduce(函数,序列[,初始])->值
将两个参数的函数从左到右累积应用于序列的项,以便将序列缩减为单个值。
例如,reduce(lambda x,y:x+y,[1,2,3,4,5])计算((((1+2)+3)+4)+5)。如果存在initial,则将其放置在计算中序列的项目之前,并在序列为空时用作默认值。
''' 
result = functools.reduce(func,list1)

print(result)
[14:28:06 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
15

2.3 filter() 函数

filter(func,list)函数用于过滤序列,过滤掉不符合条件的元素,返回一个 filter 对象。如果要转换为列表可以使用 list() 来转换。也就是说使用 filter 函数过滤之后剩下的就是我们需要的数据

list1 = [1,2,3,4,5,6,7]

# 定义函数返回和 2 取模为 0 得数
def func(x):
    return x % 2 == 0

# filter 函数将传入 func 实现对 list1 列表数据进行过滤 2 取模为 0 得数
result = filter(func,list1)
print(result)
print(list(result))
[13:51:43 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
<filter object at 0x7fc23bca6070>
[2, 4, 6]
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇