匿名函数

lambda()

语法: lambad  参数 : 返回值

 def func(a,b):
return a * b
print(func(2,5)) a = lambda a ,b : a*b # 将上面的函数用一行代码完成
print(a(2,5))

所有匿名函数的名字都是  lambda   可以赋值其他变量名 ,可以自己认为其他变量名是 函数名

查看函数名:

上面函数名查看

print(func.__name__)
print(a.__name__) #用来查看函数名 func
<lambda>

lambda函数可以返回多个值

a = lambda a,b : (a,b)
print(a(2,3)) 结果
(2, 3) 返回多个值接收,必须要用元组
返回的是元组

sorted()       排序函数

语法: sorted(iterable,key, reverse)

key  排序规则

运行流程:   把可迭代对象中的每一个元素交给后面key函数来执行,得到一个数字(权重),通过这个数字进行排序 

 lis = [1,34,3,5,2,6,8,32,45,65,76]
a = sorted(lis) # 内置函数提供了一个通用的排序方案 ,sorted()
print(a) 结果
[1, 2, 3, 5, 6, 8, 32, 34, 45, 65, 76] lis1 = ["江南","一个人","牧马人","风筝误","不仅仅是喜欢","渡","醉千年","你要的全拿走",]
a = sorted(lis1,key= lambda el:len(el)) # 根据字符串的长度进行排序 key 用于列表的取值条件
print(a) 结果
['渡', '江南', '一个人', '牧马人', '风筝误', '醉千年', '不仅仅是喜欢', '你要的全拿走'] lis1 = ["江南","一个人","牧马人","风筝误","不仅仅是喜欢","渡","醉千年","你要的全拿走",]
a = sorted(lis1, key = lambda el :len(el),reverse = True # 倒序排列
print(a) 结果
['不仅仅是喜欢', '你要的全拿走', '一个人', '牧马人', '风筝误', '醉千年', '江南', '渡']

filter() 函数        过滤函数

语法 : filter(function,iterable)

运行流程:  把可迭代的对象中的每一个元素交给其前面的函数进行筛选, 函数返回的是Ture 或者  False

 lis = ["张三丰","张无忌","张青","梦三","刘龙","黄屁孩","找语句","汪峰","你没"]
a = filter(lambda el : el[0]!="张",lis) # 过滤掉姓张的
print(a) # 打印的是内存地址 同时也是一个可迭代的对象
print(list(a)) 结果
<filter object at 0x000002988F147940>
['梦三', '刘龙', '黄屁孩', '找语句', '汪峰', '你没']

map()  函数     映射函数

语法 :map(function,iterable)

运行流程:   把可迭代对象中的数据交给前面的函数进行执行   返回值就是map()的处理结果

 计算列表的平方
lis = [2,3,45,6,7,8,9,10]
a = map(lambda i : i**2,lis)
print(a) # 返回的是内存地址 只一个可迭代的对象
print(list(a)) 结果
<map object at 0x00000238110F7860>
[4, 9, 2025, 36, 49, 64, 81, 100]

 reduce()函数也是Python内置的一个高阶函数。

语法 :   reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。

例如,编写一个f函数,接收x和y,返回x和y的和:

def f(x, y):
return x + y

调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:

先计算头两个元素:f(1, 3),结果为4;
再把结果和第3个元素计算:f(4, 5),结果为9;
再把结果和第4个元素计算:f(9, 7),结果为16;
再把结果和第5个元素计算:f(16, 9),结果为25;
由于没有更多的元素了,计算结束,返回结果25。

上述计算实际上是对 list 的所有元素求和。虽然Python内置了求和函数sum(),但是,利用reduce()求和也很简单。

reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:

reduce(f, [1, 3, 5, 7, 9], 100)

结果将变为125,因为第一轮计算是:

计算初始值和第一个元素:f(100, 1),结果为101

重要特点:分而治之    批量处理数据

语法:map(func1,map(func2,map(func3,map(func4,lis))

 也具有水桶效应   与zip()相似

 lis1 = [1,2,3,4,5,6]
lis2 = [12,23,34,45,56,67]
a = map(lambda a,b:a+b,lis1,lis2) # 可以接多个对象, 同时要对应对个参数 同时也根据最短列表对应的长度计算
print(list(a)) [13, 25, 37, 49, 61, 73]

递归函数     自己调用自己

例如:

 count = 1
def func():
global count
print("我要学习,拿高薪15K",count)
count += 1
func() func()

递归深度:   就是自己调用自己的次数

官方文档中说 递归的最大深度是1000, 在这之前就会给你报错

一般执行到998左右就会停止,程序报错

递归简单用途 :  病毒软件    杀毒软件

文件操作:

 import os
def func(lujing,n): # 方便查看文件夹分级
filts = os.listdir(lujing) #打开文件
for filt in filts: #查看文件名
filt_lj = os.path.join(lujing,filt) # 拼接成一个文件路径
if os.path.isdir(filt_lj): # 判断是否为文件夹
print("\t"*n,filt) # 打印文件夹分级
func(filt_lj,n+1)
else:
print("\t"*n,filt) # 打印文件夹分级 func("f:\Python讲义视频",0)
原版
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("\t"*n, fi)
read(fi_d, n+1) # 继续进⾏相同的操作
else:
print("\t"*n, fi) # 递归出⼝. 最终在这⾥隐含着return
#递归遍历⽬录下所有⽂件
read('../oldboy/', 0)

二分查找法

使用二分查找法可以提高效率,前提条件必须有序

例如

      函数二分法

 lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789]
def func(n, left, right):
if left <= right: # 边界
mid = (left + right)//2
if n > lst[mid]:
left = mid + 1
return func(n, left, right) # 递归 递归的入口
elif n < lst[mid]:
right = mid - 1
# 深坑. 函数的返回值返回给调用者
return func(n, left, right) # 递归
elif n == lst[mid]:
print("找到了")
return mid
# return # 通过return返回. 终止递归
else:
print("没有这个数") # 递归的出口
return -1 # 1, 索引+ 2, 什么都不返回, None
# 找66, 左边界:0, 右边界是:len(lst) - 1
ret = func(70, 0, len(lst) - 1)
print(ret) # 不是None

while循环二分法

 l = 0
r = len(lis)-1
n = 5
while l < r:
mid = (r +l)//2
if n > lis[mid]:
l = mid +1
if n < lis[mid]:
r = mid -1
if n == lis[mid]:
print("存在")
break
else:
print("不存在")

另类二分法  切片

def binary_search(ls, target):
left = 0
right = len(ls) - 1
if left > right:
print("不在这⾥")
middle = (left + right) // 2
if target < ls[middle]:
return binary_search(ls[:middle], target)
elif target > ls[middle]:
return binary_search(ls[middle+1:], target)
else:
print("在这⾥")
binary_search(lst, 567)

最快查找

用列表查找

lis1=[1,5,9,6,85,12]
lis2 将列表中的lis1中最大数表示列表长度,列表2用 0  1 表示,,  有数的表示1  没有的表示0

 时间复杂度最低, 空间复杂度最低
lst1 = [5, 6, 7, 8]
lst2 = [0, 0, 0, 0, 0, 1, 1, 1, 1]
for el in lst1:
lst2[el] = 1 lst2[4] == 1 # o(1)

Python内置函数二 (递归函数,匿名函数,二分法)的更多相关文章

  1. python之内置函数(二)与匿名函数、递归函数初识

    一.内置函数(二)1.和数据结构相关(24)列表和元祖(2)list:将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素).tuple:将一个可迭代对象转化成元组(如果是字典,默认将k ...

  2. python函数知识六 内置函数二、匿名函数与内置函数三(重要)

    19.内置函数二 abs():绝对值 lst = [1,2,-3,1,2,-5] print([abs(i) for i in lst]) enumerate("可迭代对象",&q ...

  3. day13 内置函数二 递归,匿名函数,二分法

    .匿名函数(名字统一叫lambda) .语法 lambda 参数:返回值 .参数可以有多个,用逗号隔开 .只能写一行,执行结束后直接返回值 4返回值和正常函数一样,可以是任意值 .列: f=lambd ...

  4. 内置函数filter()和匿名函数lambda解析

    一.内置函数filter filter()函数是 Python 内置的一个高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回由符合条件迭代器 ...

  5. python(16)- python内置函数

    python内置了一系列的常用函数,以便于我们使用,python英文官方文档详细说明:https://docs.python.org/3/library/functions.html     Buil ...

  6. Python内置的字符串处理函数整理

    Python内置的字符串处理函数整理 作者: 字体:[增加 减小] 类型:转载 时间:2013-01-29我要评论 Python内置的字符串处理函数整理,收集常用的Python 内置的各种字符串处理 ...

  7. python内置常用高阶函数(列出了5个常用的)

    原文使用的是python2,现修改为python3,全部都实际输出过,可以运行. 引用自:http://www.cnblogs.com/duyaya/p/8562898.html https://bl ...

  8. python内置函数与匿名函数

    内置函数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() d ...

  9. python内置函数,匿名函数

    一.匿名函数 匿名函数:为了解决那些功能很简单的需求而设计的一句话函数 def calc(n): return n**n print(calc(10)) #换成匿名函数 calc = lambda n ...

随机推荐

  1. 基于Spring MVC实现基于form表单上传Excel文件,批量导入数据

    在pom.xml中引入: <!--处理2003 excel--> <dependency> <groupId>org.apache.poi</groupId& ...

  2. 使用swagger作为restful api的doc文档生成——从源码中去提取restful URL接口描述文档

    初衷 记得以前写接口,写完后会整理一份API接口文档,而文档的格式如果没有具体要求的话,最终展示的文档则完全决定于开发者的心情.也许多点,也许少点.甚至,接口总是需要适应新需求的,修改了,增加了,这份 ...

  3. ionic2常见问题——解决下载gradle-2.14.1-all.zip太慢或失败

    问题描述 当我们写完ionic2项目准备打包app时(暂时介绍android) 执行命令ionic platform add android的时候下载gradle-2.14.1-all.zip太慢,因 ...

  4. 下载并安装Prism5.0库(纯汉语版)

    Prism5.0中包含了文档,WPF代码示例,程序集.本篇告诉你从哪里获取程序集和代码示例,还有NuGet包的内容. 对于新功能,资产,和API的更改信息,请看Prism5.0新内容. 文档 Pris ...

  5. canvas 绘制坐标轴

    结果: 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...

  6. canvas实现点击带水纹的按钮

    咱今天在闲逛网页时,看到一个点击带水纹的按钮特效,尼玛,写的还挺好,先看效果: 于是就奔着升级版的拿来主义,别人的好东西,咱都要拿来滴,so,扒代码! 完整代码在最后,是经过我的改进优化滴. 在这里先 ...

  7. Precision/Recall、ROC/AUC、AP/MAP等概念区分

    1. Precision和Recall Precision,准确率/查准率.Recall,召回率/查全率.这两个指标分别以两个角度衡量分类系统的准确率. 例如,有一个池塘,里面共有1000条鱼,含10 ...

  8. Chrome 的书签太多如何分类整理比较好

    对于Chrome书签太多,如何进行分类整理,下面给出几种方法~ 工具/原料 电脑 Chrome浏览器 delicious.Diigo等 方法/步骤1 1.把书签中常用网站只保存LOGO,放在书签栏最前 ...

  9. hexo搭建个人主页托管于github

    之前学习了 如何利用Github免费搭建个人主页,今天利用hexo来快速生成个人网页托管于github上. hexo系列教程:(一)hexo介绍 什么是hexo hexo是一个基于Node.js的静态 ...

  10. UIView+PYJExtension

    UIView+PYJExtension.h: // // UIView+PYJExtension.h // 扩展 // // Created by 彭运京 on 16/6/21. // Copyrig ...