文章目录

  • 函数的递归调用
    • 递归调用应该分为两个阶段
  • 二分法
  • 三元表达式
  • 匿名函数

函数的递归调用

函数的递归调用:就是在调用一个函数的过程中又直接或间接地调用自己

示例1:直接调用自己
def foo():print('hello')foo()
foo()示例:间接调用自己
def bar():print('from bar')foo()
def foo():print('from foo')bar()
foo()

为何死递归会抛出异常???
       因为无限的递归会导致内存溢出,所以python设定了最大的递归层数
       所以:不应该无限递归调用下去,应该在满足某种条件下结束递归调用,然后返回

import sys
# print(sys.getrecursionlimit())  # 默认无限递归限制1000次 ,因为占内存,一种保护机制
# print(sys.setrecursionlimit(2000))

递归调用应该分为两个阶段

1、回溯(挖井) :一层一层地递归调用下去
       2、递推(从井里往外跳):在满足某一条件的情况下结束回溯,然后开始向上一层层返回

# salary(5) = salary(4) + 10         丨向
# salary(4) = salary(3) + 10         丨下
# salary(3) = salary(2) + 10         丨挖
# salary(2) = salary(1) + 10         丨回
# salary(1) = 18                     ↓溯
#
# n=1 salary(n) = 18                              递
# n!= salary(n) = salary(n-1)+10    推def salary(n):if n == 1:return 18return salary(n-1)+10
res = salary(5)
print(res)

应用:列表中取值不取列表

nums=[111,[222,[333,[444,[555,[666,[777]]]]]]]def func(l):for x in l:if type(x) is list:# 把自身的代码重新再调用一次func(x)  # 第二层列表开始运行func()else:print(x,end=',')  #比如第一次x是111 所以输出 第二次是[222,33……)列表 所以进行if语句
func(nums)
# 111,222,333,444,555,666,777,

二分法

从小到大排列的一个数字列表,需要从该数字列表中找到我们想要的那个一个数字

nums=[-3,4,7,10,13,21,43,77,89,111,123,222,234,333]
find_num=21
def binary_search(find_num,l):print(l)if len(l) == 0:print('找的值不存在')returnmid_index=len(l) // 2  # 去中间索引值if find_num > l[mid_index]:# 接下来的查找应该是在列表的右半部分l=l[mid_index+1:]  # 排除左边内容 取右半部分binary_search(find_num,l)  # 重新执行binary_search()函数elif find_num < l[mid_index]:# 接下来的查找应该是在列表的左半部分l=l[:mid_index]  # 排除右边内容  取左半部分binary_search(find_num,l)else:print('find it')binary_search(find_num,nums)
# [-3, 4, 7, 10, 13, 21, 43]
# [13, 21, 43]
# find itbinary_search(55,nums)
# [-3, 4, 7, 10, 13, 21, 43, 77, 89, 111, 123, 222, 234, 333]
# [-3, 4, 7, 10, 13, 21, 43]
# [13, 21, 43]
# [43]
# []
# 找的值不存在

三元表达式

return x if x > y else y # 上面的多行 一行代码就能实现
       三元表达式:表达式1 if 条件 else 表达式2
       语法格式: 条件成立时要返回的值 if 条件 else 条件不成立时要返回的值

def max2(x,y):if x>y:return xelse:return y
res = max2(111,222)
print(res)# 上面的多行 一行代码就能实现
x = 111
y =222
res = x if x>y else y
print(res)

匿名函数

def用于定义有名函数
       匿名函数即没有名字的函数

res=(lambda x,y:x+y)(1,2)
print(res)

在{}内用逗号分隔开多个key:value,其中value可以是任意类型, 而key必须是不可变的类型,通常是字符串类型

# 调用匿名函数
# 方式一:
res=(lambda x,y:x+y)(1,2)
print(res)# 方式二:
func=lambda x,y:x+y
res=func(1,2)
print(res)

匿名用于临时调用一次的场景:更多的是将匿名与其他函数配合使用

# 匿名用于临时调用一次的场景:更多的是将匿名与其他函数配合使用
# from functools import reduce
# res=reduce(lambda x,y:x+y,[1,2,3],10) # 16
# print(res)
#
# res=reduce(lambda x,y:x+y,['a','b','c']) # 'a','b'
# print(res)salaries = {'egon':4.4,'lqz':3.3,'yj':2.2
}print(max([11,22,33]))
print(max(salaries))  # yj  比较的是salaries的keydef func(k):return salaries[k]
print(max(salaries,key=func))  # egon  比较的是薪资 返回的是薪资对应的人名# 简化成匿名
print(max(salaries,key=lambda k:salaries[k]))
print(min(salaries,key=lambda k:salaries[k]))
# 比较salaries字典  key里的k指的是salaries的没一个key值
# 所以比较依据是每个key对应的value值的话 是salaries[k]来比较list_info = [{'name': 'egon', 'sex': 'male', 'age': '18', 'salary': '3000'},
{'name': 'alex', 'sex': 'male', 'age': '38', 'salary': '30000'},
{'name': 'wupeiqi', 'sex': 'female', 'age': '28', 'salary': '20000'},
{'name': 'yuanhao', 'sex': 'female', 'age': '28', 'salary': '10000'}]
print(max(list_info, key=lambda l: l['salary']))
# 比较list_info列表, key里的l指的是list_info的每一行列表值
# 所以比较依据是salary的话 是每一行列表l['salary']来比较# 根据薪资排序
print(sorted(salaries,key=lambda k:salaries[k],reverse=True))
# ['egon', 'lqz', 'yj']

python入门day16——函数的递归调用、二分法、三元表达式、匿名函数相关推荐

  1. mysql通过函数完成10的阶乘_请使用函数的递归调用编写求阶乘的函数,并计算1!+2!+3!+4!+5!...

    点击查看请使用函数的递归调用编写求阶乘的函数,并计算1!+2!+3!+4!+5!具体信息 答:include "stdio.h" int fac(int k) { if(k==1) ...

  2. 函数递归/二分法/列表,字典生成式/三元表达式/匿名函数/内置函数

    一.递归函数 递归函数:就是在函数调用阶段直接或者间接的调用自己 递归函数的两个阶段: 1.回溯:不停的重复的一个过程,在这个过程中将问题不断的简单化,直到最终打到要求(条件) 2.递归:一次次的往回 ...

  3. MATLAB 函数的递归调用 例题

    MATLAB 函数的递归调用 例题 eg:利用函数的递归调用,求n!. 函数文件: function f=Untitled49(n) if n<=1f=1; elsef=Untitled49(n ...

  4. Python函数的递归调用

    一:递归的定义 函数的递归调用:是函数嵌套调用的一种特殊形式 具体是指: 在调用一个函数的过程中又直接或者间接地调用到本身 # 直接调用本身 def f1():print('是我是我还是我')f1() ...

  5. python 函数递归_Python零基础之三元表达式、函数递归、匿名函数教程!超级详细!...

    目录 一.三元表达式 二.函数递归 递归调用的定义 递归分为两个阶段:递归,回溯 三.匿名函数 什么是匿名函数? 有名字的函数与匿名函数的对比 lambda匿名函数的应用 四.内置函数 #注意:内置函 ...

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

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

  7. python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce、map、filter)

    python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce.map.filter) Python 中函数的应用非常广泛,比如 input() .print().range( ...

  8. 函数的递归调用(专题)

    函数的递归调用(专题) 递归调用:函数的递归调用,就是函数在执行的时候自动调用自己! 功能:当我们把一个大问题按照某种解决方案细化为若干个小问题的时候,结果我们发现这些小问题的解决方案又和前面大问题的 ...

  9. 1113: 递归调用的次数统计(函数专题)

    1113: 递归调用的次数统计(函数专题) 时间限制: 1 Sec 内存限制: 128 MB 提交: 2795 解决: 2006 [提交] [状态] [讨论版] [命题人:admin] 题目描述 如下 ...

最新文章

  1. 2659: [Beijing wc2012]算不出的算式
  2. http://www.raytracegroundup.com/downloads.html 对该页的翻译。
  3. 实验0-Hive配置与启动
  4. 热模块替换html,热模块替换启用,但不能正常工作http:// localhost:3000/__ webpack_hmr...
  5. HBase-site.xml 常见重要配置参数(转载)
  6. python类的成员函数_注入一个python类成员函数
  7. 计算机中丢失mpr.dll,mprmsg.dll
  8. Microsoft Lync
  9. 富文本_轻量级 web 富文本编辑器 —— wangEditor
  10. 用Indy创建收发电子邮件的例子
  11. Docker上部署MariaDB
  12. 数据结构与算法(二):比较有名的排序和所有算法
  13. python语言结构化语言_如何在python中处理结构化语言文件
  14. 百度地图 android SDKv2.2.0
  15. HDFS中的NameNode和DataNode
  16. linux 串口终端源码,LINUX 串口通讯源码
  17. 变色龙引导r2795
  18. python读取手机通讯录_python爬取通讯录
  19. Windows系统封装步骤
  20. 数据挖掘day04-微积分的本质10~11

热门文章

  1. es的refresh和flush介绍
  2. J2ME开发环境部署!
  3. 2022软件测试技能 Mysql数据库必会知识点总结
  4. macOS终端命令行配置网络代理
  5. MapReduce解决乘用车辆和商用车辆的销售数据分析
  6. 牛客网 赛码在线编程中数据读取问题
  7. Shell脚本模拟用户行为刷App积分,学习娱乐之用,再加图像数字识别验证码登录
  8. 考研中国科学院大学计算机分数线,中国科学院大学2017年考研分数线
  9. Docker学习,这一篇博客就够了
  10. PHP实现附近的人、按距离排序之Redis GEO方案