内置函数二

1.lamda匿名函数

为了解决一些简单需求而设计的一句话函数

# 求n的平方
#第一种方法:
def func(n):
    return n * n
print(func(4)) #16
#第二种方法:
a = lambda n: n * n
print(a(4)) #16

语法: 函数名=lamda参数:返回值                                  匿名函数不需要特殊声明,一句话就可以生成一个函数

注意:1匿名函数可以使用多个参数,每个参数要用逗号隔开  

  2匿名函数不管多复杂,只能写一行,且逻辑结束后直接返回值

  3返回值和普通函数一样,可以是任意数据类型

匿名函数并不是没有名字,通过__name__查询统一显示的是lamda,调用时跟普通函数一样

应用:和函数组合使用

2 sorrted排序函数

  语法:sorted(iterable,key=None,reverse=False)  # iterable:可迭代对象     key:排序规则,在sorted内部会将可迭代对象的每一个元素传递给这个函数的参数,根据函数运行结果进行排序.  

                       #  reverse:是否倒序   True:是,False:否

lst=[1,5,3,7,6,9,2]
lst1=sorted(lst)
print(lst)# [1, 5, 3, 7, 6, 9, 2] 原列表不会改变
print(lst1)#[1, 2, 3, 5, 6, 7, 9] 排序后的内容给了新列表
dic={1:'A',2:'B',3:'C'}
print(sorted(dic))# [1, 2, 3] 返回的是排序后的key值

 应用:1与函数组合使用;特别注意key值调用函数没有()

# 对列表中的内容按照长度排序
lst=['山本五十六','渡边','索尼爱立信','一本道','馋'] def func(el): return len(el) print(sorted(lst,key=func)) # ['馋', '渡边', '一本道', '山本五十六', '索尼爱立信']

  2与lamda组合使用

按照年龄排序
dic=[{'name':'zhao','age':18},{'name':'qian','age':8}, {'name':'sun','age':38},{'name':'li','age':28}] print(sorted(dic,key=lambda a:a['age'])) #打印结果为[{'name': 'qian', 'age': 8}, {'name': 'zhao', 'age': 18}, {'name': 'li', 'age': 28}, {'name': 'sun', 'age': 38}

  

3 filter筛选函数

  语法:filter(function,iterable)  #function:用来筛选的函数,在filter中会自动把可迭代对象中的元素传递给function,然后根据function返回的True或者False来判断是否保留这项数据,True:保留   iter:可迭代对象

筛选年龄大于20的
lst=[{1:'名字','2':18},{1:'韩天宇','2':25},{1:'罗永浩','2':42}] print(filter(lambda a:a['2'],lst))# <filter object at 0x000001DC35DC8978> print(list(filter(lambda a:a['2']>20,lst)))#[{1: '名字', '2': 18}, {1: '韩天宇', '2': 25}, {1: '罗永浩', '2': 42}]

  

4 map映射函数

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

计算多个数的平方
def func(n):
    return n**2
mp=map(func,[2,3,4])
print(mp)#<map object at 0x000001EDF0C989B0>
print(list(mp))#[4, 9, 16]
计算多个数平方(lamda方式)
print(list(map(lambda a:a**2,[2,4,6])))#[4, 16, 36]

  

# 计算两个列表中相同位置的数的和
lst=[1,2,3,4,5]
lst1=[3,6,98,45,78]
print(list(map(lambda x,y:x+y,lst,lst1)))  #[4, 8, 101, 49, 83]

5 递归:在函数中调用函数

def func():
    print('哈哈')
    func()
func()    #死循环 ,循环深度最大为1000

  我们可以使用递归来遍历各种树形结构, 比如我们的文件夹系统. 可以使用递归来遍历该文件夹中的所有文件

import os
def read(filepath,n):
    files=os.listdir(filepath)       #获取到当前文件夹中的所有文件
    for fi in files:       #遍历文件夹中的文件,这里获取的只是本层文件名
        fi_d=os.path.join(filepath,fi)  #加入文件夹 获取到文件夹+文件
        if os.path.isdir(fi_d):    #如果该路径下的文件是文件夹
            print("	"*n,fi)
            read(fi_d,n+1) # 继续进行相同的操作
        else:
            print("	"*n,fi)     #递归出口,最终在这里隐含着return
read('d:/财哥',0)   #递归遍历目录下的文件

  

6二分法

二分查找:每次砍掉一般的数据,查找效率比较高,但是必须是有序数列.

 func(n, left, right):
    if left <= right: # 边界  左边界小于等于右边界
        mid = (left + right)//2 #中间值 地板除
        if n > lst[mid]:  #如果数据n大于中间值
            left = mid + 1# 左边界挪到中间+1的位置,相当于缩小一半位置
            return func(n, left, right) # 递归  递归的入口
        elif n < lst[mid]:#如果数据n小于中间值
            right = mid - 1#右边界挪到中间位置-1
            # 深坑. 函数的返回值返回给调用者
            return func(n, left, right)    # 递归
        elif n == lst[mid]: #如果n==中间值
            print("找到了")
            return mid
            # return  # 通过return返回. 终止递归
    else:
        print("没有这个数") # 递归的出口
        return -1 # 1, 索引+ 2, 什么都不返回, None
# 找66, 左边界:0,  右边界是:len(lst) - 1
ret = func(66, 0, len(lst) - 1)
print(ret) # 不是None

  

原文地址:https://www.cnblogs.com/lingcai/p/9482905.html