ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

多层语法糖与递归函数

2022-03-21 20:05:53  阅读:172  来源: 互联网

标签:index return 递归 递归函数 多层 语法 func print def


目录

多层装饰器

'''
语法糖会将紧挨着的被装饰对像的名字当作参数自动传入装饰器函数中
'''
# 判断print的打印顺序
def outter1(func1):
    print('outter1')
    def wrapper1(*args, **kwargs):
        print('wrapper1')
        res1 = func1(*args, **kwargs)
        retern res1
    return wrapper1

def outter2(func2):
    print('outter2')
    def wrapper2(*args, **kwargs)
    	print('wrapper2')
        res2 = func2(*args, **kwargs)
        return res2
    return wrapper2

def outter3(func3):
    print('outter3')
    def wrapper3(*args, **kwargs)
    	print('wrapper3')
        res2 = func3(*args, **kwargs)
        return res3
    return wrapper3


@outter3
@outter2
@outter1
def index():
    print('index')

有参装饰器

def outter(data):
    def login_auth(func_name):  #不能动,只能接收被装饰对象的名字
        def inner(*args, **kwargs):  # 只能给被装饰对象传参
            username = input('username>>>').strip
            owd = input('pwd>>>').strip
'''
	校验用户数据  数据的来源可以有很多 比如全局字典 全局列表 文件等 数据的来源不同 处理方式就不同 对应的代码编写就不一样分支结构处理 根据不同的参数 匹配不同的流程
'''
			if data == '1'
    			print('使用字典的方式处理数据')
			if data == '2'
            	print('使用处理列表的方式处理数据')
             else:
                print('采用其他方式')
			res = func_name(*args, **kwargs)
			return res
        return inner
    return login_auth
'''
函数名加括号的执行优先级最高

@outer('2')
	左侧是语法糖结构 右侧是函数调用,由于函数调用优先级最高,所以,现调用outer('2') 返回值login_auth
	然后就变成了   @login_auth
	与普通的装饰器一样
'''

递归函数

# 递归函数,也被称为函数的递归
本质是,函数在运行过程中,直接或者间接的调用函数本身
#直接调用自己
def index():
	print('index')
    index()
index()
#间接调用自己
def func():
	index()
def index():
	finc()
index()
'''
当上面这种情况发生,也就是,函数一直递归调用,没有结束条件,函数的复杂的没有降低,也就是,无意义的递归,在函数递归调用1000次后,python解释器会强行停止递归,并报错提醒,超出最大递归深度
'''
# 可以通过sys模块中的getrecursionlimit()方法获取最大递归深度,setrecursionlimit()方法修改最大递归深度
import sys
print(sys.getrecursionlimit())  # 获取最大递归深度
sys.setrecursionlimit(2000)  # 修改最大递深度
'''
递归函数的使用应该满足两个条件:
	1.每次递归复杂的应该降低
	2.有明确的结束条件
'''

递归函数练习

'''
五排学生最后一排学生18,前面一排学生比后面的学生大2岁,求第一排学生的年龄
'''
def func(count):
    if count == 1:
    	return 18
    return func (count - 1) + 2
print(func(5))
'''
取出列表l = [1,[2,[3,[4,[5]]]]]中的每一个数字
'''
l = [1,[2,[3,[4,[5]]]]]
def func(list):
    for i in list:
        if isinstance(i,int):
            print(i)
        else:
            return func(i)
func(l)

二分法

'''
二分法是一个基础的算法,是算法里面比价简单的一个, 算法就是解决问题的有效方法,方法不同,效率不同
'''

# 使用二分法的前提是,数据集必须是升序或者降序
l1 =[13,21,35,46,52,67,76,87,99,123,213,321,432,564,612]
# 查找  a = 99
'''
二分法原理,获取数据集的中间元素,与所查元素比较大小
以升序为例
如果中间元素大于99,就保留数据集左边的元素,再次二分,循环往复,直到找到对应元素
如果中间元素小于99,则保留右边的元素
'''
def index(l, num):
    res = len(l)
    middle = res // 2
    if res == 0:
        print('没有这个数')
        return
    if l[middle] == num:
        print('找到了')
        return
    if l[middle] > num:
        l = l[0:middle]
        print(l)
        index(l, num)
    if l[middle] < num:
        l = l[middle + 1:]
        print(l)
        index(l, num)
index(l1, 99)
'''
二分法的缺陷
	1.如果要找的元素在开头,二分法会更复杂
	2.数据集必须是有序的
'''

标签:index,return,递归,递归函数,多层,语法,func,print,def
来源: https://www.cnblogs.com/mzzxlz/p/16036232.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有