python day14内置函数二(lambda,sorted,filter,map,递归)

一.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
 
原文地址:https://www.cnblogs.com/chcj/p/9910585.html