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. UE4 命令行打开工程

    创建快捷方式,目标填写: D:\EpicGames\4.14\Engine\Binaries\Win64\UE4Editor.exe "D:\YourProjectPath\YouProje ...

  2. IDEA搭建spingboot项目

    1.Springboot2.x是依赖于JDK1.8及以上版本的.因此先在电脑上安装JDK1.8,由于公司的项目用的是JDK1.7,所以要在JDK1.7的基础上在安装JDK1.8,让两者同时存在于电脑上 ...

  3. 170819-关于EL表达式的知识点

    1 .EL表达式 [1] 简介 > JSP表达式 <%= %> 用于向页面中输出一个对象. > 到JSP2.0时,在我们的页面中不允许出现 JSP表达式和 脚本片段. > ...

  4. 基于ES6的tinyJquery

    原文地址:Bougie的博客 jQuery作为曾经Web前端的必备利器,随着MVVM框架的兴起,如今已稍显没落.但它操作DOM的便利性无出其右.我用ES6写了一个基于class简化版的jQuery,包 ...

  5. weilaiqiche

    <!DOCTYPE html><html lang="en"> <head> <meta http-equiv="Content ...

  6. 「PHP开发APP接口实战009」日常安全防范之防SQL入和XSS攻击

    防SQL注入和XSS攻击通用过滤 首先在 /app/library/ 目录下创建 Security.php 文件并添加以下代码: <?php /** * * 防SQL注入和XSS攻击通用过滤 * ...

  7. 三层for循环求解组成三角形边的组合

    假设a.b.c是三角形的三条边,当三条边符合勾股定理时,即,a2+b2=c2 ,为直角三角形.若a.b.c均为小于等于50的整数,求能够组成直角三角形的所有组合.请显示边的各种可能组合情况,显示总的组 ...

  8. Python笔记(二十一)_内置函数、内置方法

    内置函数 issubclass(class1,class2) 判断class1类是否为class2类的子类,返回True和False 注意1:类会被认为是自身的子类 >>>issub ...

  9. python操作mysql之增删改查

    [insert] import MySQLdb conn = MySQLdb.connect(","08day5" ) cur = conn.cursor() #把数据放 ...

  10. idea2019.1 永久破解 亲测可用

    idea2019突然注册码突然失效了,搜了很多破解办法,这个还是有效的:https://www.jianshu.com/p/b6dd43618a66