Python第十五天内置函数

128 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

高阶函数

高阶函数:所谓的高阶函数就是把作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指这种高度抽象的编程范式

体验高阶函数

在Python中 abs()函数可以完成对数字求绝对值计算

abs(-10) # 负10绝对值 10 

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

round(1.2) #四舍五入1
round(1.9) #四舍五入2

需求:任意两个数字,按照指定要求整理数字后再进行求和计算

方法1

#设置一个函数,函数在有两个形参分别为ab
def add_num(a,b):
    #设置完函数名称,然后设置执行代码
    #执行代码是 设置一个返回值返回值函数,return 就是一个返回值函数 代码执行的结果会通过他返回给add_num
    #他要返回的是 绝对值的a 加上绝对值的b
    #那么a和b就是要通过外部传值进来的了 ab就是两个传输通道位置类似
    return abs(a) + abs(b)
#设置一个变量并调用add_num函数
#而赋值给函数两个对应形参a和b的值是-1 和2 
#这时候就会传入该函数的执行代码中
#-1被取绝对值就是1 2的绝对值就本身
result = add_num(-1,2)
#然后打印出赋值的变量 打印结果为3
print(result) 

方法2

#设置应该函数 函数在有三个形参 分别是abf
def sum_num(a,b,f):
    #设置return 返回值   并设置f处理a f 处理b 并相加两个处理完的结果
    #为什么没有f呢等一下就知道了
    return f(a) + f(b)
#这时候我们设置应该变量,变量的赋值内容就是调用sum_num函数
#变量的内容是替换abf的三个形参 ,但是我们注意到最后应该对应f的形参是abs abs不是取绝对值的码
#没错了最后一个abs 就是直接把 用户输入的内容取一个绝对值然后再发送给函数 
​
aaa = sum_num(-1,2,abs)
#这时候再打印出调用函数执行完结果的赋值变量aaa
#输出结果为3
print(aaa)

内置的高阶函数

map()

map(fun, ls) 就是将传入的函数变量func 作用到st变量的每个元素中 ,并将结果组成新的列表(Python2)/迭代器(python3)返回

需求:计算list1 序列中各个数字的2次方

#准备列表数据
list1 = [1,2,3,4,5]
#设置函数 函数执行代码为计算二次方
def func(x):
    #fuc函数中有一个x的形参 和下面执行代码的要对应
    #执行代码是 x 的二次方的运算 
    #** 表示次方 后面数字表示几次方 如果是**4 就是四次方
    return x ** 2#当在python2 中运行会返回列表
result = map(func,list1)
#当在python3 中运行会返回一个迭代器 但是他输出是输出内存地址#这打印出的是内存地址,可能会看不懂内存地址
print(result)
#这就是将打印出的内存地址转成成看的懂的
print(list(result))
​
#输出结果[1,4,9,16,25]

reduce()

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

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

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

#导入functools 模块
# functools 模块提供用于调整或扩展函数和其他可调用对象的工具
import functools
​
#设置一个列表
list1=[1,2,3,4,5]
​
#定义一个函数 func 形参为a和吧
def func(a,b):
    #函数执行代码是 返回形参ab的相加结果
    return a + b
​
#设置一个变量 变量所要赋值的内容是调用funtools 模块 和func函数和 list1列表
#当这样去调用的时候就会将列表中的元素相加起来了
#就好比一开始 a1 b2  他们相加 1+2=3  然后又变成了 a3 b3 3+3=6   又继续获取列表下一个数字 变成了a=6 b=4 6+4=10  然后继续获取  a=10 b=5  10+5=15  然后继续获取 发现没有了 然后就没有了 可以没怎么去理解他
result = functools.reduce(func,list1)
​
#输出结果为15
print(result)

filter()

filter(func,lst) 函数用于过滤序列,过滤掉不符合条件的元素,返回一个file对象,如果要转换为列表可以使用list() 来转换

#定义一个列表
list1 =[1,2,3,4,5,6,7,8,9,10]
​
#定义函数 func 形参x
def func(x):
    #执行代码是 x形参 除与 2 == 0 的 将这个数返回给函数  
    return x % 2 ==0#这里调用了filer函数 func 和 list1 列表 这时候 列表中的数就会不断替换到x的位置上 直到没有 
result = filter(func,list1)
​
#输出result 变量会发现 是内存码等等 这时候就要用到下面这个代码 去吧内存码转换成我们看的懂的
print (result)
print (list(result))
#输出结果为[2, 4, 6, 8, 10]

总结

递归

函数内部自己调用

必须有出口

lambda

语法

lambda 参数列表:表达式

lambda 的参数形式

无参数

lambda : 表达式

一个参数

lambda 参数 : 表达式

默认参数

lambda key=value:表达式

不定长位置参数

lambda *args: 表达式

不定长关键字参数

lambda ** kwargs: 表达式

高阶函数

作用:把函数作为参数传入,化简代码

内置高阶函数

map()

reduce()

filter()

\