day15

  chaos  not is a pit,

前方高能---- 内置函数二

 

1.lambda匿名函数

2.sorted()

3.filter()

4.map()

5.递归函数

 

 一. lambda匿名函数

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

# 计算n的n次方
def func(n):
    return n * n
print(func(10))

f = lambda n: n **n
print(f(10))

  lambda 表示的是匿名函数,不需要用def来声明,一句话就可以声明出一个函数.

 语法: 

   函数名 = lambda  参数 : 返回值

 注意:

  1.函数的参数可以有多个,多个参数之间用逗号隔开.

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

  3. 返回值和正常的函数一样,可以是任意数据类型.

 匿名函数并不是说一定没有名字,这里前面的变量就是一个函数名,说他是匿名原因是我们通过__name__查看的时候是没有名字的,统一都叫lambda.在调用的时候没有什么特别之处,像正常的函数调用即可.

 

二 . sorted()

   排序函数.

  语法: sorted(iterable , key = None, reverse = False)

     Iterable : 可迭代对象.

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

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

lst = [1,5,3,4,6]
lst2 = sorted(lst)
print(lst)    # 原列表不会改变
print(lst2)    # 返回的新列表是经过排序的.

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 el : el['age']))

三 . filter()

  筛选函数

  语法 : filter(function, Iterable)

    function: 用来筛选的函数,在filter中会自动的把iterable中的元素传递给function,然后根据function返回的True或者False来判断是否保留此项数据.

    Iterable: 可迭代对象.

lst = [1,2,3,4,5,6]
ll = filter(lambda x : x %2 == 0 ,lst)    # 筛选所有的偶数
print(ll)
print(list(ll))
lst = [{"id":1, "name":'alex', "age":18},
       {"id":2, "name":'wusir', "age":16},    
       {"id":3, "name":'taibai', "age":17}]
f = filter(lambda el : el['age'] > 16 ,lst)    #筛选年龄大于16的数据
print(list(f))

 四.map()

  映射函数

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

 计算列表中的每个元素的平方,返回新列表.

def func(e):
    return e*e
mp = map(func,[1,2,3,4,5])
print(mp)
print(list(mp))

 改变成lambda

print(list(map(lambda x : x*x,[1,2,3,4,5])))

 计算两个列表中相同的位置的数据的和.

l1 = [1,2,3,4,5]
l2 = [5,6,7,8,9]
print(list(map(lambda x,y:x+y,l1,l2)))

五. 递归

   在函数中调用函数本身,就是递归.

def func():
    print('我是谁,')
    func()
func()

 在python中,递归的深度最大到998

count = 0 
def func():
    global count
    print('你是谁啊',count)
    count += 1
    func()
func()

    递归的应用:

  文件夹系统.使用递归遍历该文件夹中的所有文件.

import os

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

 六.  二分查找

   二分查找,每次能够排除掉一半的数据,查找的效率非常高,但是局限性比较大,必须是有序序列才可以使用二分查找.

  要求: 查找的序列必须是有序序列.

# 判断n是否在lst中出现,如果出现请返回n所在的位置
# 二分查找 ---- 非递归算法
lst = [22,33,44,55,66,77,313,5555,67899]
n = 567
left = 0 
right = len(lst) - 1
count = 1
while left <= right:
    middle = (left+right) // 2
    if n < lst[middle]:
        right = middle -1
    elif n > lst[middle]:
        left = middle + 1
     else:
        print(count)
        print(middle)
        break
     count = count + 1
else:
    print('不存在')

 

posted @ 2018-08-15 17:43  吧啦吧啦吧啦  阅读(99)  评论(0编辑  收藏  举报