前言:

上次咱们基本说了一下函数的定义及简单使用,想要了解的伙伴可以去看看。Python中最基本的函数及其常用用法简析(新手必备)小本本记起来

现在咱们整点进阶一些的。同样都是小白,咱也不知道实际需要不,但是对于函数的执行顺序以及装饰器的理解还是很有必要的,首先咱们先简单复习一下。

函数的定义:

def 函数名字(参数):具体的函数语句块return [需要返回的数据]

函数的执行:

# 函数只有被调用的时候才执行,函数可以执行多次
函数名称()

局部与全局变量:

不同的函数有不同的作用域

def test1():name = 'XXX'print(name)def test2():name = 'YYY'print(name)test1()
test2()
局部想使用全局变量 使用global 变量名
局部与全局变量同名仍要同时使用全局变量局部变量 globals()['变量名']

还有一种情况就是函数内嵌套了函数想使用上次层函数的变量。

def test1():name = 'XXX'def test2():# 使用上一层的变量并打印查看nonlocal nameprint(name)# 在函数test1中调用执行test2test2()test1()
# 直接调用test2会抛出异常test2 未定义
# test2()

因为箭头那里有空格,Python也是根据这种格式来判断作用域的,只能像红色框那样在同一级的地方调用。

一个函数内返回另一个函数:

def test1():print("in the test1")def test2():print("in the test2")return test1()test2()

想把上面的这段代码解释清楚,咱们插播一个递归。

递归的特性:

递归就是自己调用自己

必须有个明确的结束条件,不然会导致栈溢出

每次递归问题都有所减少

递归效率不高,但是有时候真的好用

来个最经典的斐波拉契数组。

# 斐波拉契数组长这样:1,1,2,3,5,8,13,21,34,55...
def fabonacci(n):# 结束条件if n <= 2:# 因为前两个数字都是1,所以当n小于等于2时返回1v = 1return v# 大于2的话就自己调用自己,斐波拉契第n个数字等于n-1的数字+n-2数字的和v = fabonacci(n-1)+fabonacci(n-2)return vprint(fabonacci(6))

import sys# 打印当前递归深度,默认为1000
print(sys.getrecursionlimit())
# 设置最大递归深度
sys.setrecursionlimit(999999999)
print(sys.getrecursionlimit())

其实就是表达函数内调用另一个函数,会等待另一个函数执行完毕,该函数再执行到结束...感觉递归讲不讲都一样了...so,咱们还是赶紧回到正题,代码的执行顺序是这样子的....

当然还能这么玩:

def test1():print("in the test1")def test2():print("in the test2")# 此处返回test1的内存地址return test1test2()()
# 先执行test2(),返回test1的内存地址
# 加上小括号执行test1

匿名函数

1.使用lambda 创建

2.简单来说匿名函数就是一个没有名字的简单函数

3.匿名函数只有一个表达式,return 表达式计算的值

创建一个简单的匿名函数,命令如下所示。

格式       lambda 参数列表:表达式
lambda num1, num2: num1+num2

使用一个变量接收一下,就是保存的内存地址,加上小括号传入参数就能运行了。

func = lambda num1, num2: num1+num2print(func(1, 2))

我使用的编辑器是VS Code ,发现了一个问题,格式化代码的时候把匿名函数改成了函数...具体原因及细节未知。

格式化前:

格式化后:

map 映射(循环让每一个函数执行函数,结果保存到新的列表)

map(匿名函数,可迭代对象)

map()处理序列中的每个元素,得到的结果是一个可迭代对象,该对象个数和位置与原来一样。

li = [1, 5, 3, 2, 3]
res = map(lambda x: x+1, li)
print(type(res))
# 返回的map对象
print(list(res))

filter 判断

filter()遍历序列中的每个元素,得到的结果是True则留下来。

people = ['sb_laowang', 'sb_xiaozhang', 'sb_laozhang', 'xiaoliu']
# 将满足以帅比开头的保存为新的对象
res = filter(lambda x: x.startswith('sb'), people)
print(type(res))
print(list(res))

reduce:将序列进行合并操作

from functools import reduce
num_li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
str_li = list('hello')
res_num = reduce(lambda x, y: x+y, num_li)
res_str = reduce(lambda x, y: x+y, str_li)
print(str_li)print(type(res_num), res_num)
print(type(res_str), res_str)

第一次运行的时候x,y是可迭代对象的前两个,后面x都是之前的累加,y则是没有进行累加的第一个,说一下reduce(lambda x, y: x+y, num_li)这个吧,可以打个断点看一下。

第一次x = 1 , y = 2
第二次x = 3 , y = 3
第三次x = 6 , y = 4
第四次x = 10 , y = 5
...

匿名函数的好处:

简化代码

没有名字,避免函数名字冲突

查看某个模块的所有方法:

# print(dir(模块名字))
# 例如:
import time
print(dir(time))print(dir(list))

提取数据结构:

# 可能有这种需求,一个人给你个文件,读取出来是文本,或者是需要计算的公式,但是他是字符串# 假如是个字典格式的 {'name':'sb'},但是他是个文本
temp1 = "{'name':'sb'}"
print(temp1,type(temp1))
temp2 = eval(temp1)
print(temp2, type(temp2))temp3 = "1+2"
print(eval(temp3))# 注意只能提取出来格式与要提取的格式一样的文本

最后总结:

本文基于Python,主要讲解了递归思想和匿名函数相关知识,例举了几个常用的匿名函数及其基本用法,如lambda、map、reduce、filter等,并简述了匿名函数的优点。关于匿名函数,还有以下一点需要注意。

匿名函数书写简单,适用于仅有一个简单表达式的函数,并且避免了函数名字冲突的问题,两个函数名字冲突下面函数会覆盖上面函数的功能,如:

def func():print('aaa')def func():print('bbb')func()

但是编辑器能检测出两个同名的函数,有一个编辑异常,虽然能正常运行,但是显然不符合代码开发规范。匿名函数没有名字肯定不会出现函数名字重复。

欢迎大家点赞,留言,转发,感谢大家的相伴与支持,关注公众号:【Python的进阶之旅】有惊喜哦!

Python中匿名函数及递归思想简析(小本本记下来)相关推荐

  1. Python中的匿名函数及递归思想简析

    匿名函数 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这三类 ...

  2. python匿名函数的作用_Python中的匿名函数及递归思想简析

    匿名函数 前言 上次咱们基本说了一下函数的定义及简单使用,Python中的基本函数及其常用用法简析,现在咱们整点进阶一些的.同样都是小白,咱也不知道实际需要不,但是对于函数的执行顺序以及装饰器的理解还 ...

  3. 匿名函数自我调用_Python中的匿名函数及递归思想简析

    匿名函数 前言 上次咱们基本说了一下函数的定义及简单使用,Python中的基本函数及其常用用法简析,现在咱们整点进阶一些的.同样都是小白,咱也不知道实际需要不,但是对于函数的执行顺序以及装饰器的理解还 ...

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

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

  5. Python中的基本函数及其常用用法简析

    分享Python中的基本函数及其常用用法简析,首先关于函数的解释函数是为了达到某种目的而采取的行为,函数是可重复使用的,用来实现某个单一功能或者功能片段的代码块,简单来说就是由一系列的程序语句组成的程 ...

  6. python 中匿名函数的使用

    一.概述 在python3中的匿名函数是用来处理一些简单的逻辑,简单的功能的,这样可以节省栈内存,在使用场景中,很多情况是用于某个函数的参数,或者一些只需要一句话的逻辑,接下来让我们看看匿名函数的使用 ...

  7. python中匿名函数的作用_什么是Python中的匿名函数

    匿名函数 lambda x , y : x+y 1.匿名的目的就是要没有名字,给匿名函数赋给一个名字是没有意义的. 2.匿名函数的参数规则.作用域关系与有名函数是一样的. 3.匿名函数的函数体通常应该 ...

  8. python中匿名函数的作用_Python 中的匿名函数,你会用吗

    原标题:Python 中的匿名函数,你会用吗 概念 我们从一个例子引入. 这里有一个元素为非空字符串的列表,按字符串最后一个字母将列表进行排序.如果原列表是 ['abc', 'g', 'def'],则 ...

  9. Python中匿名函数详解

      匿名函数是指没有名字的函数,应用在需要一个函数,但是又不想费神去命名这个函数的场合.通常情况下,这样的函数只使用一次.在Python中,使用 lambda 表达式创建匿名函数,其语法格式如下: r ...

最新文章

  1. 阿里云查看mysql版本_查看mysql版本
  2. 《可穿戴创意设计:技术与时尚的融合》一一第3章 从纺织品到可穿戴设备
  3. GTK在Windows下开发和运行的一些设置问题
  4. el-table中每列设置同样的宽度导致表格宽度没法实现100%布局
  5. dispatch作用 react_「React系列」手把手带你撸后台系统(Redux与路由鉴权)
  6. SQL Server 2008 R2 系统配置检查器的检查参数和妨碍性问题的解决办法
  7. html5 canvas获取坐标系,HTML5 Canvas坐标变换
  8. 计算机应用基础复制3,计算机应用基础3(答案)
  9. 结构体的空间分配和位定义
  10. 单片机控制直流电机正反转
  11. JupyterNotebook中更新pip以及使用pip install安装lightgbm
  12. js压缩文件或文件夹
  13. JavaScript中getYear,getMonth,getDate()
  14. 面试题---测试用例设计
  15. 西电捷通TISec解决方案保障配电网通信安全
  16. excel 制作好看的图表
  17. 有哪些性价比高的照明品牌?性价比最高的灯具品牌
  18. 应用于素描人脸识别的迁移学习
  19. 2023年创新型中小企业评价和专精特新认定
  20. 玩游戏键盘一按就打开计算机,win10电脑玩游戏时按键盘会自动弹字

热门文章

  1. linux显示当前电源功耗命令,linux基础命令-查看系统状态-free -m以及top命令详解...
  2. flutter安装开发环境-问题记录
  3. day9-字符串总结
  4. linux和windows的异同
  5. 高频前端开发面试问题及答案整理
  6. 面试中常用的英语对话
  7. Allegro 16添加ESD和WEEE标识
  8. crm客户管理系统能提升业绩吗?
  9. U3D如何添加IOS内购,自制内购小插件
  10. useHooks~小窍门