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')
 
 
 
 
 

day15 python lambda函数 递归函数 二分法的更多相关文章

  1. Python lambda函数

    python允许定义单行的小函数,定义lambda函数的形式如下: lambda 参数:表达式lambda函数默认返回表达式的值,可接收任意个参数,包括可选参数,但是表达式只有一个.

  2. python lambda函数详细解析(面试经常遇到)

    1 作用:通常是用来在python中创建匿名函数的 2 格式: lambda 参数[,参数] : 表达式 3 注意: (1)lambda定义的是单行函数, 如果需要复杂的函数,应该定义普通函数 (2) ...

  3. Python——lambda函数

    Lambda 函数又称匿名函数,匿名函数就是没有名字的函数,函数没有名字也行?当然可以啦.有些函数如果只是临时一用,而且它的业务逻辑也很简单时,就没必要非给它取个名字不可. 好比电影里面的群众演员,往 ...

  4. python - Lambda函数 匿名函数

    Lambda 匿名函数 python 使用 lambda 来创建匿名函数. lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda ...

  5. python lambda 函数

    lambda 函数,也叫匿名函数,是一个不需要使用def 关键字定义的小函数.返回一个函数地址. 表达式只能有一个,参数可以有多个. a = lambda x:x*x a(3) 返回的是9

  6. python—lambda函数,三个常用的高阶函数

    """lambda 参数列表 : 返回值lambda 参数形式: 1.无参数:lambda:100 2.一个参数:lambda a: a 3.默认参数:lambda a, ...

  7. python - lambda 函数使用

    # if we need it only once and it's quite simple def make_incrementor(n): return lambda x: x + n f = ...

  8. Python lambda函数使用

  9. Python基础总结之认识lambda函数、map函数、filter() 函数。第十二天开始(新手可相互督促)

    今天周日,白天在学习,晚上更新一些笔记,希望对大家能更好的理解.学习python~ lambda函数,也就是大家说的匿名函数.它没有具体的名称,也可以叫做一句话函数,我觉得也不过分,大家看下代码,来体 ...

随机推荐

  1. MATLAB 用 imresize() 函数缩小图象是 double 和 uint8 有差别

    今天发现一个奇怪的现象. 在用 imresize() 缩小图象时,如果图象时 double 格式的,缩小后会产生不连通的现象. 下面是原图: 对这张图象 img 做 simg = imresize(i ...

  2. sql查询XML

    --查询Extra里节点UName值等于“黄”的所有信息 select * from t_UserPayLog where Extra.exist('//UName[.="黄"]' ...

  3. php中数组的指针

    利用PHP内置的函数 key() 获得键. current()获得值, next(); prev();移动到上一个 reset();//重置,移动到第一个元素 end();//移动到最后一个元素上 注 ...

  4. sql 优化建议

    1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  5. upc组队赛17 Stone Game【极小值】

    Stone Game 题目链接 题目描述 Alice and Bob are always playing game! The game today is about taking out stone ...

  6. Android深度探索-卷1第十章心得体会

    本章介绍了传统的printk 函数调试技术和其他的调试技术,如gdb gdbserver  kgdb 对于复杂的Linux 驱动及HAL 等程序库,需要使用各种方法对其进行调试,如,设置断点.逐步跟踪 ...

  7. Convolutional Neural Networks(4):Feature map size,Padding and Stride

    在CNN(1)中,我们用到下图来说明卷积之后feature maps尺寸和深度的变化.这一节中,我们讨论feature map size, padding and stride. 首先,在Layer1 ...

  8. 应用安全 - Web安全 - 文件包含攻防

    LFI - 无限制本地文件包含 通过目录遍历漏洞可以获取到系统中其他文件的内容 常见的敏感信息路径 Windows系统 c:\boot.ini // 查看系统版本 c:\windows\system3 ...

  9. python math 模块

    数学模块 引入模块:import math 注意: 使用某个模块下的函数,必须先引入这个模块,否则无法正常使用. ceil() 向上取整操作 格式:math.ceil(数值) 返回值:整型 floor ...

  10. lib.tcl

    #********************************************************************# 功能描述:定义公共的函数# 依赖关系:依赖于全局aitoo ...