day14函数递归调用
day14函数递归调用
1、装饰器叠加
def deco1(func1):
def wrapper1(*args,**kwargs):
print('=====>wrapper1 ')
res1 =func1(*args,**kwargs)
return res1
return wrapper1
def deco2(func2):
def wrapper2(*args,**kwargs):
print('=======>wrapper2')
res2 = func2(*args,**kwargs)
return res2
return wrapper2
def deco3(func3):
def wrapper3(*args,**kwargs):
print('=====>wrapper3')
res3 =func3(*args,**kwargs)
return res3
return wrapper3
@deco1 # deco1(函数wrapper2的内存地址)->函数wrapper1的内存地址
@deco2 # deco2(函数wrapper3的内存地址)->函数wrapper2的内存地址
@deco3 # deco3(最原始那个index函数的内存地址)->函数wrapper3的内存地址
def index():
print('====>index')
return 123
res =index()
print(res)
输出结果:
=====>wrapper1
=======>wrapper2
=====>wrapper3
====>index
123
2、函数递归调用
1、什么是函数递归调用
函数递归调用是函数嵌套调用的一种特殊格式,具体是指在调用一个函数的过程中。
又直接或者间接的调用自己
函数递归调用不应该无限递归调用下去,应该在满足某种条件下结束递归调用
所以,函数递归调用应该分为两个阶段:
1.回溯
2.递推
案例1:
def age(n): #5,4,3,2,1 #2,3,4,5,
if n == 1:
return 30
return age(n-1)+10 #一层层推进,一层层反过来加上来
res=age(5)
print(res)
输出结果:70
案例2:
l = [1,[2,[3,[4,[5,[6,[7]]]]]]]
def foo(l):
for item in l:
if type(item) is not list:# 判断是列表不打印
print(item)
else:
foo(item)
foo(l)
输出结果:1 2 3 4 5 6 7
2、基于递归实现二分法:
nums = [-3, 5, 7, 11, 21, 31, 41, 53, 67, 77, 83, 99, 101]
find_num = 67 # 需要找的值
print(len(nums)) # 列表有13个值
def srarch(nums,find_num):
print(nums)
if len(nums) == 0:
print('不存在')
return
mid_index = len(nums)//2 # 列表长度整除2赋值给变量名,13//2=6
if find_num > nums[mid_index]: # 67 > 41,取6的索引对应值
srarch(nums[mid_index+1:],find_num) # 在右半部分
elif find_num < nums[mid_index]: # 变量名(传值)大于列表(值)
srarch(nums[:mid_index],find_num) #在 左半部分
else:
print('找到了')
srarch(nums,67)
3、生成器
a = [i for i in range(1,6)]
l = [i**2 for i in range(1,6)]
c = [i/2 for i in range(1,8)]
print(a,l,c)
输出结果:[1, 2, 3, 4, 5] [1, 4, 9, 16, 25] [0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5]
l = [i for i in range(1,10) if i < 10]
print(l)
输出结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]
1.列表生成器:找出dsb
names = ['liusir_dsb', 'housir_dsb', 'egon', 'wusir_dsb']
res = [i for i in names if i.endswith('dsb')] #找出关键词dsb
print(res)
输出结果:['liusir_dsb', 'housir_dsb', 'wusir_dsb']
2.字典生成式
res = {k:v for k,v in [('name','meng'),('age',18)]}
print(res)
输出结果:{'name': 'meng', 'age': 18}
3.集合生成器
res = {i for i in range(5)}
print(res,type(res))
输出结果:{0, 1, 2, 3, 4} <class 'set'>
4.生成器表达式
l = [i for i in range(1,6)]
print(l)
print(next(l))
4、匿名函数
调用匿名函数方式一 # 不推荐使用
f=lambda x,y:x+y
print(f(1,2))
调用匿名函数方式二 #推荐使用
res = (lambda x,y:x+y)(1,2) #调用函数传值
print(res)
day14函数递归调用的更多相关文章
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- gcc O2优化选项对内嵌汇编以及函数递归调用的影响
学习和使用c这些年来,很多方面都未深入研究过,就如脱离了IDE后,我可能连编译一个c文件的命令都写不出来. 最近需要在c中内嵌汇编解决问题,参考网上相关的资料写了一段汇编代码,在测试的时候时好时坏,找 ...
- Python函数递归调用
函数的递归调用: 是函数嵌套调用的一种特殊形式 具体是指: 在调用一个函数的过程中又直接或间接地调用到了本身 # 直接调用本身 def func(): print('我是func') func() f ...
- SQL SERVER树型数据处理时,函数递归调用问题,查询根节点,子节点函数
/* 标题:查询指定节点及其所有子节点的函数 作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 时间:2008-05-12 地点:广东深圳 */ ) , pid ) , name )) ' , n ...
- python 关于函数递归调用自己
爬取b站博人传 每页短评20个,页数超过1000页, 代码如下 import requests import json import csv def main(start_url): headers ...
- 你好,C++(27)在一个函数内部调用它自己本身 5.1.5 函数的递归调用
5.1.5 函数的递归调用 在函数调用中,通常我们都是在一个函数中调用另外一个函数,以此来完成其中的某部分功能.例如,我们在main()主函数中调用PowerSum()函数来计算两个数的平方和,而在P ...
- JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法
函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留 ...
- python之函数递归
函数递归调用 在函数内部,可以调用其它函数,如果一个函数在内部调用自身,即是递归调用 为防止无限递归类似于死循环,需要如下: 1.必须要有一个明确的返回值: 2.每次进入更深一层递归时,问题规模应该比 ...
- python 函数递归与匿名函数
1.什么是函数递归? 函数递归调用(是一种特殊的嵌套调用):在调用的函数过程中,又直接或者间接的调用了该函数本身 递归必须要有两个明确的阶段: 递推:一层一层递归调用下去,强调每进入下一层递归问题的规 ...
随机推荐
- Oracle 扩容表空间
system用户登陆oracle https://blog.csdn.net/zyingpei/article/details/88870693 首先查看表空间对应的数据文件位置以及大小 select ...
- 地表最强IDE ——Visual Studio 2022正式发布
地表最强IDE--Visual Studio 2022昨天正式发布啦! 堪称宇宙第一IDE工具集的Visual Studio,在经过不断更新优化之后,新版本就要与大家见面了.本次新版本发布,有许多令人 ...
- Effective Python(3)- 了解 bytes 与 str 的区别
Python 有两种类型可以表示字符序列 bytes:实例包含的是原始数据,即 8 位的无符号值(通常按照 ASCII 编码标准来显示) str:实例包含的是 Unicode 码点(code poin ...
- CrawlSpider_获取图片名称地址,及入库
1.继承自scrapy.Spider 2.独门秘笈 CrawlSpider可以定义规则,再解析html内容的时候,可以根据链接规则提取出指定的链接,然后再向这些链接发送请求 所以,如果有需要跟进链接的 ...
- Jetpack架构组件学习(1)——LifeCycle的使用
原文地址:Jetpack架构组件学习(1)--LifeCycle的使用 | Stars-One的杂货小窝 要看本系列其他文章,可访问此链接Jetpack架构学习 | Stars-One的杂货小窝 最近 ...
- Docker Compose 容器编排 NET Core 6+MySQL 8+Nginx + Redis
环境: CentOS 8.5.2111Docker 20.10.10Docker-Compose 2.1.0 服务: db redis web nginx NET Core 6+MySQL 8+N ...
- <C#任务导引教程>练习四
//27,创建一个控制台应用程序,声明两个DateTime类型的变量dt,获取系统的当前日期时间,然后使用Format格式化进行规范using System;class Program{ sta ...
- [atARC115F]Migration
称$k$个物品的位置$(a_{1},a_{2},...,a_{k})$为一个状态,并设初始状态为$S$,结束状态为$T$ 定义状态的比较:首先根据$\sum_{i=1}^{k}h_{a_{i}}$,即 ...
- [atARC102F]Revenge of BBuBBBlesort
定义以$i$为中心(交换$p_{i-1}$和$p_{i+1}$)的操作为操作$i$ 结论1:若执行过操作$i$,则之后任意时刻都无法执行操作$i-1$或操作$i+1$ 当执行操作$i$后,必然有$p_ ...
- patch增量更新