python葵花宝典第15式-匿名函数、内置函数、映射函数

python葵花宝典第15式-匿名函数、内置函数、映射函数

15.1 lambda函数(匿名函数)
匿名函数并不是没有函数名字
注意:
(1)函数的参数可以有多个,多个参数之间用逗号隔开
(2)匿名函数不管有多复杂,只能写一行,且逻辑结束后直接返回数据
(3)返回值和正常的函数一样,可以使任意数据类型
(4)Lambda表示匿名函数,不需要def进行生命,一句话就可以生声明一个函数
语法:lambda 参数:返回值
第一招

#匿名函数
a = lambda n : n*n
ret = a(9)
print(ret)

相当于:

#普通函数
def func(n):
    return n * n

ret = func(9)
print(ret)

第二招(面试题)

t = lambda x,y : (x,y)
print(t(2,2))

15.2 sorted函数
(1)语法: sorted(list_name,key=function_name,reserve=False)
(2)key:排序方案,sorted函数内部会把可迭代对象中的每一个元素拿出来交给后面的key,后面的key计算出一个数字,作为当前这个元素的权重
(3)reserve:Ture反向排序,False正向排序
第三招

lst = ["王俊凯","易烊千玺","文章","赵四","李晓凡"]

def func(s):
    return len(s)
    
print(sorted(lst,key=func))

第四招

lst = [{"name":"李晓凡","age":23},
       {"name":"崔月红","age":24},
       {"name":"柳博文","age":18},
       {"name":"堡垒","age":25}]

print(sorted(lst,key=lambda el:el["age"],reverse=True))

15.3 filter筛选器
语法:filter(function,Iterable)
function:用来筛选的函数。在filter中会自动的将iterable中的元素传递给function.然后根据function返回的True或者False来判断是否保存此项数据
Iterable:可迭代对象
第五招

#filter筛选器
lst = ["文波","彭珍","鲍烈","李晓凡","崔月红","陈凤"]
#筛选
f = filter(lambda el : el[0] != "李",lst)
#将lst中的每一项传递给fun,所有返回Ture的都会保留,所有返回False都会过滤掉
print("__iter__" in dir(f))#判断filter是否可迭代
for e in f:
    print(e)

相当于:

lst = ["文波","彭珍","鲍烈","李晓凡","崔月红","陈凤"]
def fun(el):
   if el[0] == "李":      
	return False#舍弃的
   else:
      return True#保留的
f = filter(fun,lst)
 #将lst中的每一项传递给fun,所有返回Ture的都会保留,所有返回False都会过滤掉
print("__iter__" in dir(f))#判断filter是否可迭代
for e in f:
    print(e)

结果:
True
文波
彭珍
鲍烈
崔月红
陈凤

第七招

lst = [
    {"name":"文波","age":26},
    {"name":"彭珍","age":26},
    {"name":"赵舜","age":24},
    {"name":"陈凤","age":24},
    {"name":"晓凡","age":23}
]

f = filter(lambda el: el["age"] > 24,lst)
print(list(f))

15.4 map()映射函数
语法:map(function,iterable)可以对可迭代对象中的每一个元素进行映射,分别取执行function

第八招

#map映射函数
lst = [1,4,7,2,5,8]
def fun(el):
    return el**2
m = map(fun,lst)#把后面的可迭代对象中的每一个元素传递给function,结果就是function的返回值
print("__iter__" in lst)
print(list(m))

相当于:

lst = [1,4,7,2,5,8]
 lst2 = []
#计算每个数字的平方
for el in lst:
    lst2.append(el**2)

print(lst2)

结果:
False
[1, 16, 49, 4, 25, 64]

第九招(计算两个列表中相同位置的数据的和

lst1 = [1,2,3,4,5]
lst2 = [2,4,6,8,10]
print(list(map(lambda x,y: x+y, lst1, lst2)))

15.5 递归

第十招

#递归函数,自己调用自己
def fun():
    print("文波很帅")
    fun()

fun()

注意:递归深度,你可以自己调用自己的次数,官方文档最大深度为1000,在这之前会进行报错

第十一招(进行文件目录的遍历)

#遍历文件夹,打印所有的文件和文件夹
import os
def fun(filepath,n):
    #1、打开文件夹
    files = os.listdir(filepath)#查看当前目录中的文件
    #2、拿到每一个文件名
    for file in files:#获取文件名
        #3、获取到文件的路径
        file_p = os.path.join(filepath,file)
        #4、判断是否是文件夹
        if os.path.isdir(file_p):
            #5、如果是文件夹,继续调用程序
            print("\t"*n,file)
            fun(file_p,n+1)
        else:
            #5、如果不是文件夹,直接打印文件
            print("\t"*n,file)
            
fun("f:/python学习视频",0)

15.6 二分查找
(1)使用二分法可以提高效率
(2)只可用于有序列表

第十二招(普通循环)

lst = [11, 12, 22, 32, 33, 38, 45, 67, 83, 89, 90, 99]

n = 89
left = 0
right = len(lst) - 1

while left <= right:#边界,当右边小于左边时退出循环
    mid = (left + right)//2#必须是整除
    if lst[mid] > n:
        right = mid - 1
    if lst[mid] < n:
        left = mid + 1
    if lst[mid] == n:
        print("找到了这个数")
        break
else:
    print("对不起,没有找到这个数")

第十三招(递归循环)

递归形式的二分法
lst = [11, 12, 22, 32, 33, 38, 45, 67, 83, 89, 90, 99]

def fun(n,left,right):
    if left <= right:
        mid = (left + right)//2
        if n > lst[mid]:
            left = mid + 1
            return fun(n,left,right)
        elif n < lst[mid]:
            right = mid - 1
            return fun(n,left,right)
        elif n == lst[mid]:
            print("找到这个数了")
            return mid
    else:
        print("没有找到这个数")
        return -1#一般的索引为+,什么都不返回则是None

#寻找33,从左至右进行查找
func = fun(33,0,len(lst)-1)
print(func)

结果:
找到这个数了
4

本期学习到此结束,欢迎关注批评指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值