一、匿名函数

  什么是匿名函数?

    顾名思义就是没有名字的函数,在我们声明一个函数时会想起个什么函数名好,这个问题我想有时候会困惑大家的吧?   

 def func():  #正常函数声明
pass
print(func.__name__)
#运行结果:func a=lambda x:x*x #匿名函数
print(a.__name__)
#运行结果:<lambda>

    而匿名函数并不是说一定没有名字,这里前面的变量a 就是一个函数名,说他是匿名函数是因为我们通过__name__方法查看的时候是没有名字的,统一为<lambda>

    所以我们叫它为匿名函数。

  匿名函数的特点:

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

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

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

二、递归与二分法

  

  利用一下这个有趣的图片,我们python中的递归就好比这个图片一样。在函数内部调用函数本身,这就是递归调用。

  

 def eat():
print("吃饭")
eat()
eat() #在程序执行完可以看到有这样的错误maximum recursion depth exceeded while calling a Python object 意识就是说 调用Python对象时,最大递归深度超过了限制

   递归的特点:

      在递归时调用函数会产生局部的名称空间,占用内存,因为上述这种调用会无需调用本身,python解释器的内存管理机制为了防止其无限制占用内存,

  对函数的递归调用做了最大的层级限制:1000(可以通过设置改变) ,

  递归的用处无上限,能做你想不到的事情,或许也做不到你想做的事情。

  例如遍历一个文件夹中的所有文档:

 import os                #导入os模块
def func(filepash,n):
files=os.listdir(filepash) #获取当前文件夹中的所有文件
for file in files: #遍历文件夹中的文件,这里只是获取本层文件名
f_d=os.path.join(filepash,file) #加人文件夹 获取文件夹+文件
if os.path.isdir(f_d): #如果改路径下的文件是文件夹
print("\t"*n,file)
func(f_d,n+1) #递归调用
else:
print("\t"*n,file) #递归出口
func("f:/魔兽争霸3",0)

  二分法

  想从一个按照从小到大排列的数字列表中找到指定的数字,遍历的效率太低,用二分法(算法的一种,算法是解决问题的方法)可以极大低缩小问题规模。

  核心思想:掐头去尾取中间,一次砍一半

 #当遇到一个无序列表时,就将二分法与冒泡排序结合使用
lst=[1,65,136,98,64,98,794,654,98,76,465,49,751,]
for i in range(len(lst)):
for i in range(len(lst)-1):
if lst[i]>lst[i+1]:
lst[i],lst[i+1]=lst[i+1],lst[i]
right=len(lst)-1 #将右端看成尾部
left=0 #将左端看成头部
n=465
while left<=right:
mid = (right + left) // 2 #取一个中间值
if n<lst[mid]:
right=mid-1 #通过参数与中间值比较截取的一段
if n>lst[mid]:
left=mid+1
if n ==lst[mid]:
print("找到了")
break
else:
print("未找到")

  那我们既然学会了递归,就该活学活用利用递归思想来进行二分法

 lst=[1, 49, 64, 65, 76, 98, 98, 98, 136, 465, 654, 751, 794]       #前提是有序列表
def func(n,left,right):
mid = (left+right)//2
if left<=right:
if n < lst[mid]:
right=mid-1
return func(n,left,right)
if n > lst[mid]:
left=mid+1
return func(n,left,right)
if n==lst[mid]:
print("找到了")
return mid
else:
print("没找到")
return -1
print(func(465,0,len(lst)-1))

 

python之匿名函数、递归与二分法的更多相关文章

  1. python函数:匿名函数、函数递归与二分法、面向过程编程

    今天主要讲三大部分内容: 一.匿名函数二.函数递归与二分法三.面向过程编程 一.匿名函数: """ 1. 什么时匿名函数 def定义的是有名函数:特点是可以通过名字重复调 ...

  2. python基础——匿名函数及递归函数

    python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...

  3. 小学生都能学会的python(<lamda匿名函数,sorted(),filter(),map(),递归函数>)

    小学生都能学会的python(<<lamda匿名函数,sorted(),filter(),map(),递归函数,二分法>> 1. lambda 匿名函数 lambda 参数: ...

  4. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  5. JS匿名函数递归实现阶乘

    var rs = (function (value) { if (value > 1) return value * arguments.callee(value - 1); return va ...

  6. 孤荷凌寒自学python第二十天python的匿名函数与偏函数

    孤荷凌寒自学python第二十天python的匿名函数与偏函数 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python为使函数的使用更加方便高效,可以使用两种特殊的函数简化语句书写. 一 ...

  7. Python中匿名函数与内置高阶函数详解

    大家好,从今天起早起Python将持续更新由小甜同学从 初学者的角度 学习Python的笔记,其特点就是全文大多由 新手易理解 的 代码与注释及动态演示 .刚入门的读者千万不要错过! 很多人学习pyt ...

  8. python day-15 匿名函数 sorted ()函数 filter()函数 map()函数 递归 二分法

    一.匿名函数 匿名函数的结构:变量   =  lamda  参数: 返回值 a  =  lamda  x : x*x       # x为参数,   : 后边的为函数体 print(a(x)) def ...

  9. day16 python之匿名函数,递归函数

    匿名函数 匿名函数格式 函数名 = lambda 参数 :返回值 #参数可以有多个,用逗号隔开 #匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值 #返回值和正常的函数一样可以是任 ...

随机推荐

  1. Python - Django - 页面上展示固定的页码数

    如果页数太多的话,全部显示在页面上就会显得很冗杂 可以在页面中显示规定的页码数 例如: book_list.html: <!DOCTYPE html> <html lang=&quo ...

  2. python那些事儿

    一.探索python 1.尝试安装python3 https://www.python.org/downloads/mac-osx/ 2.问题 安装了3.7,但是python -V还显示2.7.10. ...

  3. [OpenCV开发]OpenCV图像编码和解码 imencode和imdecode使用,用于网络传输图片

    在很多应用中,经常会直接把图片的二进制数据进行交换,比如说利用 socket 通信传送图片二进制数据,或者直接用内存数据库(例如 Redis)来传递图片二进制数据. 这个时候,当你的应用程序读到内存里 ...

  4. 最新 迅游科技java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.迅游科技等10家互联网公司的校招Offer,因为某些自身原因最终选择了迅游科技.6.7月主要是做系统复习.项目复盘.Leet ...

  5. Django orm练习

    ORM练习题 models生成 from django.db import models # Create your models here. # 书籍管理 class Book(models.Mod ...

  6. C语言实现从左向右字幕滚动的效果

    #include <stdio.h> #include <string.h> #include <windows.h> int main() { char str[ ...

  7. FutureTask源码阅读

    FutureTask功能用法 类结构 源码中详细说明了FutureTask生命周期状态及变化 /** * The run state of this task, initially NEW. The ...

  8. ArcObjects中IMapAlgebraOp的使用体会

    本文提供使用IMapAlgebraOp接口实现大部分栅格计算的简单方法. 1.首先,ArcObjects提供了很多关于栅格计算的方法,有条件运算.逻辑运算及数学表达式,如下:              ...

  9. spark kmer计算

    输入文件:fa格式的文件 输出结果:kmer的频数和对应的kmer类型和计数 1.将fq.gz的文件转换成fa文件: #!/usr/bin/python env # -*- coding:utf-8 ...

  10. QT 创建本地数据库(SQLite数据库)存储数据

    注意:QT自带SQLITE数据库,不需要再安装 1.创建一个包含创建.查询.修改和删除数据库的数据库类(DataBase) DataBase.h头文件 #pragma once #include &l ...