day15 python
一.匿名函数 lambda
1.lambda函数
def func(n): #普通函数, 功能比较简单, 当函数多的时候, 起名也不好取
return n*n
print(func(9))
a = lambda n : n*n #匿名函数语法: lambda 参数: 返回值
print(a(9))
print(func.__name__) #func
print(a.__name__) #<lambda>匿名函数的名字都是<lambda>, 可以把a认为是函数的名字
a = 1,2,3 #(1,2,3) a是一个元组
a = (1,2,3,) #(1,2,3) a是一个元组
a = (1,2,3) #(1,2,3) a是一个元组
y = 'other'
a = lambda x, y : x, y #(<function <lambda> at 0x0000011A5A332EA0>, 'other') #这时候a是个元组
print(a)
a = lambda x, y : (x, y) #这时的a才是lambda函数, 想要返回多个值, 返回值要加括号
print(a)
2.lambda函数的特点
1.函数的参数可以后多个, 以,号分隔
2.匿名函数不管多复杂只能写一行, 且逻辑结束后返回数据(复杂的用def)
3.返回值和正常的函数一样, 可以是任意数据类型
3.lambda函数练习
a = lambda *args: max(args)
print(a(12,3243,5,3,3))
二.递归(recursion)
函数自己调用自己, 递归默认是死循环
多用于处理类似的算法
函数调用递归过程必须解决两个问题:
一是递归计算的公式
二是递归结束的条件和此时函数的返回值
对求阶乘的递归函数来说 ,这两个条件可以写成下列公式
递归计算公式 p(n)=n*p(n-1)
递归结束条件 p(1)=1
在程序设计实现:
if(递归结束条件) return(递归结束条件中的返回值)
else return(递归计算公式)
消耗内存, 能用循环的话, 最好不要用递归
i = 0
def func():
global i
print('bajie: %s' % i)
i+=1
func()
func() #递归深度, 你可以自己调用自己的次数, 官方(1000)次,在这之前就会抛出异常
import sys
sys.setrecursionlimit(1000) #设置递归深度的值
print(sys.getrecursionlimit()) #查看递归深度的值
文件夹的遍历
import os
filepath = r'C:\Users\THINKPAD\PycharmProjects\s15'
def func(filepath,n):
files = os.listdir(filepath)
for file in files:
file_path = os.path.join(filepath, file)
if os.path.isdir(file_path):
print('\t'*n, file+':')
func(file_path,n+1) #为什么要用递归, 第一有相同的操作, 第二循环几次不确定
else:
print('\t'*n, file)
func(filepath,0)
二分查找
二分法进行查找,每次能够排除掉一半的数据. 查找效率非常高
要求: 查找的序列必须是有序序列
原生二分法:
lst = [1,2,4,5,9,21,23,34,35,56,87,123,231,345,678,999]
n = 35
for i in lst: #遍历查找 #最大时间复杂度o(n)
if i == n:
print('found')
break
else:
print('not found')
left = 0
right = len(lst)-1
while left <= right: #使用二分法可以提高效率(有序的才能用这种方法)(一次砍一半)
middle = (left + right)//2 #这里必须是整除
if lst[middle] > n: #2**n < 数据量; 比如1亿个数, 27次就可以找到
right = middle - 1
if lst[middle] < n:
left = middle + 1
if lst[middle] == n:
print('found')
break
else:
print('not found')
递归可以完成二分法
lst = [1,2,4,5,9,21,23,34,35,56,87,123,231,345,678,999]
def func(n,left,right):
if left <= right: #为啥不用while, 因为用了递归
middle = (left + right)//2
if n > lst[middle]:
left = middle + 1
return func(n, left, right) #递归
if n < lst[middle]:
right = middle - 1
return func(n, left, right) #递归 #返回值的问题: 如果递归了很多层, 最后一层得到结果,返回给倒数第二层, 就完事了. 如何一层层返回: return 倒数第二层给倒数第三次, 依次类推直到返回给第一层.
if n == lst[middle]:
print('found')
return middle #通过return返回, 不能用break
else:
print('not found')
return -1 #1.模仿find找不到返回 -1(一般index是整数); 2. -1 比 None好运算,可能会用到
rst = func(87, 0, len(lst)-1)
print(rst)
三.查找最快的方案
lst1 = [2,3,5,6,8]
lst2 = [0 for i in range(max(lst1)+1)] #找到列表中最大的数, 作为都是 0 的新列表的长度
for el in lst1: #把数字变成index
lst2[el] = 1
n = 1
if lst2[n] == 1: #优点o(1) 时间复杂度, 空间复杂度最低
print('it is in')
else:
print('it not in')
- Python lambda函数
python允许定义单行的小函数,定义lambda函数的形式如下: lambda 参数:表达式lambda函数默认返回表达式的值,可接收任意个参数,包括可选参数,但是表达式只有一个.
- python lambda函数详细解析(面试经常遇到)
1 作用:通常是用来在python中创建匿名函数的 2 格式: lambda 参数[,参数] : 表达式 3 注意: (1)lambda定义的是单行函数, 如果需要复杂的函数,应该定义普通函数 (2) ...
- Python——lambda函数
Lambda 函数又称匿名函数,匿名函数就是没有名字的函数,函数没有名字也行?当然可以啦.有些函数如果只是临时一用,而且它的业务逻辑也很简单时,就没必要非给它取个名字不可. 好比电影里面的群众演员,往 ...
- python - Lambda函数 匿名函数
Lambda 匿名函数 python 使用 lambda 来创建匿名函数. lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda ...
- python lambda 函数
lambda 函数,也叫匿名函数,是一个不需要使用def 关键字定义的小函数.返回一个函数地址. 表达式只能有一个,参数可以有多个. a = lambda x:x*x a(3) 返回的是9
- python—lambda函数,三个常用的高阶函数
"""lambda 参数列表 : 返回值lambda 参数形式: 1.无参数:lambda:100 2.一个参数:lambda a: a 3.默认参数:lambda a, ...
- python - lambda 函数使用
# if we need it only once and it's quite simple def make_incrementor(n): return lambda x: x + n f = ...
- Python lambda函数使用
- Python基础总结之认识lambda函数、map函数、filter() 函数。第十二天开始(新手可相互督促)
今天周日,白天在学习,晚上更新一些笔记,希望对大家能更好的理解.学习python~ lambda函数,也就是大家说的匿名函数.它没有具体的名称,也可以叫做一句话函数,我觉得也不过分,大家看下代码,来体 ...
随机推荐
- Android keystore 密码找回
昨天准备给自己的应用发布一个新版本,在apk打包时,发现之前的用的keystore密码忘了. 蛋碎了一地,我把我所能想到的密码都试了一遍(注:我平常在各个门户网站注册基本上用的都是那几个字母和数字组合 ...
- php匿名函数和闭包的理解
PHP匿名函数和闭包使用的句法与普通函数相同,但匿名函和闭包数其实是伪装成函数的对象. 匿名函数:就是没有名称的函数.匿名函数可以赋值给变量,对象传递.不过匿名函数仍是函数,因此可以调用,还可以传入参 ...
- 重写LayoutParams,读取子View自定义属性
在EasyConstraintLayout内部定义一个静态类LayoutParams继承ConstraintLayout.LayoutParams,然后在构造方法中读取上面自定义的属性.我们通过裁剪的 ...
- 牛客提高D2t2 幸运数字考试
分析 预处理出所有合法数字 然后直接lower_bound查询即可 代码 #include<iostream> #include<cstdio> #include<cst ...
- 【CDN+】 Hive 入门 以及Handoop 系统认知
前言 本文主要介绍Hive 的基础概念,以及Handoop的大体架构,组件依赖,对于大数据有个总体的认识 Hive 基础概念 官网:https://hive.apache.org/ The Apach ...
- apktool介绍
apktool可以反编译出app的资源文件,apktool工具的下载路径:https://ibotpeaches.github.io/Apktool/ 下载后获取到一个jar文件,可以通过如下命令进行 ...
- webpack-使用html-webpack-plugin和ejs-loader将侧栏、头部、底部公共html做成模板,并生成合并后的html页面
在学习前端自动化之前一直使用 PHP,JSP 将在每个页面将头部.侧栏.底部等部分引入,现在前端 "娱乐圈" 一直噼里啪啦的每天出新东西,自从接触了前端自动化我就觉得这种工作可以交 ...
- TensorFlow学习笔记1-入门
TensorFlow学习笔记1-入门 作者: YunYuan *** 写在前面 本笔记是我学习TensorFlow官方文档中文版的读书笔记,由于尚未搭建好Github的个人博客的评论功能,故尚不方便与 ...
- 机器学习实战笔记-10-K均值聚类
K-均值聚类 优点:易实现.缺点:可能收敛到局部最小值,大规模数据集上收敛较慢:适用于数值型数据. K-均值聚类(找到给定数据集的k个簇) 算法流程 伪代码: 创建k个点作为起始质心(经常是随机选择) ...
- mooc-IDEA 调试代码--012
mooc-IDEA 调试代码 添加断点快捷键:ctrl+F8 单步运行:F9 <=>resum(从一个断点跳转到下一个断点) 一行一行运行:F8 查看所有断点: 禁止所有断点: 条件断点 ...