一.lambda匿名函数
为了解决一些简答的需求而设计的一句话函数.
计算n的n次方
def func(n):
return n**n
print(func(10))
lambda
f=lambda n:n**n
print(f(10))
lambda表示的是匿名函数,不需要用def来声明,一句话就可以声明出一个函数.
语法:
函数名=lambda 参数:返回值
注意:
1.函数的参数可以有多个.多个参数之间用逗号隔开.
2.匿名函数不管有多复杂.只能写一行,且逻辑结束后直接返回数据.
3.返回值和正常的函数一样,可以是任意数据类型.
匿名函数并不是说一定没有名字.这里前面的变量就是一个函数名.说他是匿名原因是我们通过__name__查看的时候是没有名字的.统一都叫lambda.在调用的时候没用什么特别之处.像正常的函数调用即可.
二.sorted()
排序函数.
语法: sorted(Iterable,key=None,reverse=Flase)
Iterable:可迭代对象
key:排序规则(排序函数),在sorted内部会将可迭代对象中的每一个元素传递给这个函数的参数.根据函数运算的结果进行排序.
reverse:是否是倒叙. True:倒叙, False:正序
lst=[1,5,3,4,6]
lst2=sorted(lst)
print(lst) #原列表不会改变 [1, 5, 3, 4, 6]
print(lst2)#如果是字典,则返回排序后的key [1, 3, 4, 5, 6]
dic ={1:'A',3:'c',2:'B'}
print(sorted(dic)) #如果是字典,则返回排序后的key
和函数组合使用
lst=["麻花藤","冈本次郎","中央情报局","狐仙"]
#计算字符串长度
def func(s):
return len(s)
print(sorted(lst,key=func)) #['狐仙', '麻花藤', '冈本次郎', '中央情报局']
和lambda组合使用
#根据字符串长度进行排序
lst=["麻花藤","冈本次郎","中央情报局","狐仙"]
#计算字符串长度
def func(s):
return len(s)
print(sorted(lst,key=lambda s:len(s))) #['狐仙', '麻花藤', '冈本次郎', '中央情报局']
lst=[{"id":1,"name":"alex","age":18},
{"id":2,"name":"wusir","age":16},
{"id":3,"name":"taibai","age":17}]
# 按照年龄对学生信息进行排序
print(sorted(lst,key=lambda s:s["age"]))
三.filter()
筛选函数
语法:filter(function,Iterable)
function:用来筛选的函数.在fliter中会自动的把Iterable中的元素传递给function.然后根据function返回的True或者False来判断是否保留此项数据.
Iterable:可迭代的对象
lst=[1,2,3,4,5,6,7]
ll=filter(lambda x: x%2==0,lst) #筛选所有的偶数
print(ll)
print(list(ll))
lst2 = [{"id":1, "name":'alex', "age":18},
{"id":2, "name":'wusir', "age":16},
{"id":3, "name":'taibai', "age":17}]
fl = filter(lambda e: e['age'] > 16, lst2) # 筛选年年龄⼤大于16的数据
print(list(fl))
四.map()
映射函数
语法:map(function,iterable) 可以对迭代对象中的每一个元素进行映射.分别取执行function.
#计算列表中每个元素的平方,返回新列表.
def func(e):
return e*e
mp =map(func,[1,2,3,4,5])
print(mp)
print(list(mp)) #[1, 4, 9, 16, 25]
改写成lambda
print(list(map(lambda x:x*x,[1,2,3,4,5])))
计算两个列表中相同位置的数据的和
# 计算两个列列表相同位置的数据的和 lst1 = [1, 2, 3, 4, 5] lst2 = [2, 4, 6, 8, 10] print(list(map(lambda x, y: x+y, lst1, lst2))) #[3, 6, 9, 12, 15]
五.递归
在函数中调用函数本身,就是递归.
def func():
print("调用")
func()
func()
递归的应用:
我们可以使用递归来遍历各种树形结构, 比如我们的文件夹系统. 可以使用递归来遍历该
文件夹中的所有文件.
import os
def func(path): #path: d:/a
lst=os.listdir(path) #打开一个文件夹,获取到文件内的所有内容
for el in lst: #当前文件夹内的所有文件名(包括文件夹名字)
#拼接文件的真实路径
file_real_path=os.path.join(path,el)
#判断这个路径是文件还是文件夹
if os.path.isdir(file_real_path):
print('文件夹:'+el)
func(file_real_path) #重新执行刚才的操作
else:
print(el) #不是文件夹,是文件
#递归的出口
func("d:/a") #递归遍历d盘的a目录下所有文件夹和文件名
结果:
文件夹:b
文件4.txt
文件1.txt
文件2.txt
文件3.txt