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函数递归调用的更多相关文章

  1. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

  2. gcc O2优化选项对内嵌汇编以及函数递归调用的影响

    学习和使用c这些年来,很多方面都未深入研究过,就如脱离了IDE后,我可能连编译一个c文件的命令都写不出来. 最近需要在c中内嵌汇编解决问题,参考网上相关的资料写了一段汇编代码,在测试的时候时好时坏,找 ...

  3. Python函数递归调用

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

  4. SQL SERVER树型数据处理时,函数递归调用问题,查询根节点,子节点函数

    /* 标题:查询指定节点及其所有子节点的函数 作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 时间:2008-05-12 地点:广东深圳 */ ) , pid ) , name )) ' , n ...

  5. python 关于函数递归调用自己

    爬取b站博人传 每页短评20个,页数超过1000页, 代码如下 import requests import json import csv def main(start_url): headers ...

  6. 你好,C++(27)在一个函数内部调用它自己本身 5.1.5 函数的递归调用

    5.1.5 函数的递归调用 在函数调用中,通常我们都是在一个函数中调用另外一个函数,以此来完成其中的某部分功能.例如,我们在main()主函数中调用PowerSum()函数来计算两个数的平方和,而在P ...

  7. JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法

    函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留 ...

  8. python之函数递归

    函数递归调用 在函数内部,可以调用其它函数,如果一个函数在内部调用自身,即是递归调用 为防止无限递归类似于死循环,需要如下: 1.必须要有一个明确的返回值: 2.每次进入更深一层递归时,问题规模应该比 ...

  9. python 函数递归与匿名函数

    1.什么是函数递归? 函数递归调用(是一种特殊的嵌套调用):在调用的函数过程中,又直接或者间接的调用了该函数本身 递归必须要有两个明确的阶段: 递推:一层一层递归调用下去,强调每进入下一层递归问题的规 ...

随机推荐

  1. repo学习总结

    转载:https://blog.csdn.net/salmon_zhang/article/details/79180075 1. repo简介 repo是Google开发的用于管理Android版本 ...

  2. 无判断max 牛客网 程序员面试金典 C++ Python

    无判断max 牛客网  程序员面试金典 C++ Python 题目描述 请编写一个方法,找出两个数字中最大的那个.条件是不得使用if-else等比较和判断运算符. 给定两个int a和b,请返回较大的 ...

  3. simulate_click

    #!/bin/bashlet actual_x=104+144*$[$2-1]let actual_y=945+144*$[$1-1]adb shell input tap ${actual_x} $ ...

  4. java实现rsa加密算法【5min快速应用教程】

    该篇文章的主要目的是让读者能够迅速应用到项目中,想要了解详细的rsa加密算法的,可以百度找到更多原理.深度分析的文章. RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一 ...

  5. Swarm+Docker+Portainer(集群,图形化)

    参考文章 https://blog.csdn.net/u011781521/article/details/80469804 https://blog.csdn.net/u011781521/arti ...

  6. 计算机网络漫谈之IP与子网掩码

    通过之前的介绍,我们现在已有的概念是任何一台计算机如果需要接入互联网,都会分配到一个IP地址.这个地址分成两个部分,前一部分代表网络,后一部分代表主机.比如,IP地址172.16.254.1,这是一个 ...

  7. [python]基于windows搭建django项目

    1.首先我的环境用到的库版本如下,若下载直接pip即可 pip3 install Django==2.0.6pip3 install djangorestframework==3.8.2pip3 in ...

  8. mysql-5.7.30安装

    1.由于在线安装受制于网络环境,所以选择tar包编译安装.      首先去mysql镜像站下载mysql-5.7.30-linux-glibc2.5-x86_64.tar.gz2.上传到linux服 ...

  9. java中lamda表达式用法

    map-> list Map<String, Object> map = new HashMap<>(); List<String> list = new A ...

  10. 暑假算法练习Day4

    已经坚持第四天啦,Fighting!!! 1008 数组元素循环右移问题 (20 分) 一个数组\(A\)中存有\(N\)\((>0)\)个整数,在不允许使用另外数组的前提下,将每个整数循环向右 ...