今天给大家介绍python基础核心语法中的函数进阶部分,讲两个 一个是匿名函数,一个是高阶函数(主要是python的内置高阶函数大家会用即可)
"""
匿名函数lambda:没有名字的函数
语法:lambda 参数列表:运算表达式
"""
# 这是正常函数定义和调用
def fn(x):
return x * x
# fn(5)
print(fn(5))
#匿名函数的语法:lambda 参数列表:运算表达式
# 匿名函数单个参数x
lambda x: x * x
# 调用匿名函数
f = lambda x:x*x
print(f(5))
# 匿名函数多个参数x,y,z
h = lambda x,y,z:x*y*z
print(h(1,2,3))
“”"
高阶函数:1、函数可以作为参数 2、函数可以作为返回值
高阶函数内置函数简介:就是把函数作为参数传入
作用:简洁代码,增加代码灵活性
“”"
# 求绝对值abs
print("python内置abs求绝对值",abs(-1))
# 求和sum()
print("python内置sum求和",sum([1,2,3,4,4]))
# 四舍五入 round() python中这个函数的精度有问题
print("python内置round求四舍五入",round(8.9))
# 对任意两个数字,对这两个数字求绝对值后进行求和
func1 = lambda x,y:abs(x)+abs(y)
print(func1(-1,0))
# 灵活一点的高阶用法:把函数作为参数
func2 = lambda x,y,func:func(x)+func(y)
print(func2(-1,0,abs))
"""
python内置高阶函数
"""
"""
1、map(func,seq)
第一个参数是函数,第2个参数是序列。
map会直接用函数操作序列中的每一个元素
map函数返回值是一个迭代器
"""
# 将list1学列中每个元素加1
list1 = [1,2,3,4,5]
# 普通用法:循环遍历列表然后操作
# 此处不举例子了
# 高阶用法:用map直接操作list1中每一个元素,即map函数第一个参数func是给元素+1,这个函数比较简单我们就可以用上面提到的匿名函数直接定义,map函数的第二个参数是要操作的序列list1
res_map = map(lambda x:x+1,list1)
print("高阶用法map函数",res_map,list(res_map))#map函数返回值是一个迭代器,我们用list(res_map)接收一下
迭代器的介绍在上一篇文章:python生成器与迭代器
1、map函数就是用函数操作序列中每一个元素,并返回一个迭代器
2、匿名函数lambda表达式可以结合像map这样的高阶内置函数,使得代码更加的简洁
"""
2、filter(func,seq)
第一个参数是函数,第2个参数是序列
filter是过滤掉序列中不符合函数条件的元素
返回的也是迭代器
"""
# 保留序列中所有的偶数
list2 = [2,4,5,6,7]
res_filter = filter(lambda x:x%2==0,list2)
print("高阶用法filter函数",res_filter,list(res_filter))
"""
3、sorted(seq,key = func)
第一个参数是要排序的序列,key=是函数
返回排序后的序列
高阶用法可以对序列自定义排序
"""
#把下面的列表用分数排序
list3 = ["zx:23","辣条:34","油条:2"]
res_sorted = sorted(list3,key=lambda x:int(x.split(":")[1]),reverse=True)
print("高阶用法sorted函数",res_sorted)
上面用分数排序用到了字符串切片方法,之前的文章也有介绍,可戳python字符串
"""
4、max(可迭代对象,key = 函数):根据函数获取可迭代函数的最大值
min(可迭代对象,key = 函数):根据函数获取可迭代函数的最小值
"""
res_max = max(list3,key = lambda x:int(x.split(":")[1]))
print("高阶max用法",res_max)
此处只是在基础阶段简单介绍下递归是个啥玩意儿,后续到高阶合集还会详细介绍递归的,喜欢可以评论期待一下哦,三斤子会更加有动力续写~~
"""
递归函数:函数内部调用函数自己
要注意规避递归错误:定义递归函数必须有出口,且条件不断像出口靠近,即不能让它一直循环调用自己
"""
# 阶乘
def func_jiecheng(n):
if n==0:# 这就是函数出口
return 1
# print(n)
# return func_jiecheng(n*(n-1))
return n * func_jiecheng(n-1) # 如果n不等于0就调用函数func_jiecheng自己
print(func_jiecheng(9))