首页 > 其他分享 >多层语法糖&有参装饰器&装饰器修复技术&递归函数

多层语法糖&有参装饰器&装饰器修复技术&递归函数

时间:2022-10-12 17:33:36浏览次数:50  
标签:index return 递归函数 多层 func kwargs print 装饰 def

目录

一.多层语法糖

语法糖会将下面紧挨着的函数名当做第一个参数自动传给@函数调用

实际案例:

def outter1(func1):
    print('加载了outter1')
    def wrapper1(*args, **kwargs):
        print('执行了wrapper1')
        res1 = func1(*args, **kwargs)
        return 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')
        res3 = func3(*args, **kwargs)
        return res3
    return wrapper3
​
​
@outter1
@outter2
@outter3
def index():
    print('from index')

image

二.有参装饰器

1.什么是有参装饰器:

​ 给装饰器传递额外的参数,满足多个数据值的传输切换

2.实操

def outer(mode):
    def login(func_name):
        def inner(*args, **kwargs):
            username = input('username:').strip()
            password = input('password:').strip()
            if mode == '1':
                print('数据直接写死')
            elif mode == '2':
                print('数据来于列表')
            elif mode == '3':
                print('数据来自于字典')
            elif mode == '4':
                print('数据来自集合')
            elif mode == '5':
                print('数据来于文本文件')
        return inner
    return login


@outer('1')
def index():
    print('from index')
index()   

@outer('2') 
def func():
    print('from func')
func() 
"""
函数名加括号执行优先级最高 有参装饰器的情况
	先看函数名加括号的执行
	然后再试语法糖的操作
"""

3.装饰器模板

1.常用的无参装饰器模板

def outer(func_name):
    def inner(*args, **kwargs):
        '''被装饰函数执行前可做的额外的操作'''
        res = func_name(*args, **kwargs)
        '''被装饰函数执行后可做的额外操作'''
        return res
    return inner
@outer
def index():
    pass

2.不常用的有参装饰器

def outer_plus(mode):
	def outer(func_name):
		def inner(*args, **kwargs)
			res = func_name(*args, **kwargs)
			return res
		return inner
    return outer
@outer_plus('dict')
def func():
    pass

三.装饰器修复技术

  • 了解知识

    help() :在使用python来编写代码时,会经常使用python自带函数或模块,一些不常用的函数或是模块的用途不是很清楚,这时候就需要用到help函数来查看帮助。help()函数是查看函数或模块用途的详细说明。

    def index():
        '''我是最棒的!!!'''
        pass
    help(index)
    结果:
    Help on function index in module __main__:
    
    index()
        我是最棒的!!!
    
    
  • 装饰器修复技术

    from functools import wraps
    def outer(func_name):
        def inner(*args, **kwargs):
            '''我是inner'''
            res = func_name(*args, **kwargs)
            return res
        return inner
        
    @outer
    def func():
    	'''我是才是func'''
        pass
    
    help(func)
    print(func)
    func()
    

四.递归函数

  • 1.函数的递归调用

​ 函数直接或间接的调用了函数自身

直接调用:
def index():
    print('from index')
    index()
index()
间接调用:
def index():
    print('from index')
    func()
def func():
    print('from func')
    index()

func()
'''最大递归深度:python解释器添加的安全措施'''
count = 0
def index():
    global count
    count += 1
    print(count)
    index()
index()
'''官网提供的最大递归深度为1000 我们在测试的时候可能时候可能会出现996 997 998'''
  • 2.递归函数

    ​ 1.直接或间接调用自己

    ​ 2.每次调用都必须比上一次简单 并且需要有一个明确的结束条件

    ​ 递推:一层层往下

    ​ 回溯:基于明确的结果一层层往上

    """
    get_age(5) = get_age(4) + 2
    get_age(4) = get_age(3) + 2
    get_age(3) = get_age(2) + 2
    get_age(3) = get_age(1) + 2
    gat_age(1) = 18
    """
    def get_age(n):
        if n == 1:
            return 18
        return get_age(n-1) + 2
    res = get_age(5)
    print(res)  # 26
    

标签:index,return,递归函数,多层,func,kwargs,print,装饰,def
From: https://www.cnblogs.com/LZXSDM/p/16785341.html

相关文章

  • 装饰器2
    今日内容概要多层语法糖问题有参装饰器装饰器修复技术递归函数今日内容详细多层语法糖问题defoutter1(func1):print('加载了outter1')defwrapper1(*a......
  • python进阶之路12之有参装饰器、多层语法糖、递归函数简介
    多层语法糖defoutter1(func1):print('加载了outter1')defwrapper1(*args,**kwargs):print('执行了wrapper1')res1=func1(*args,**kwa......
  • 15、python函数篇 多层语法糖、装饰器和装饰器修复技术及递归函数
    目录一、多层语法糖1、什么是多层语法糖:2、多层语法糖用法:二、有参装饰器1、什么是有参装饰器:2、有参装饰器的作用:三、装饰器修复技术1、什么是装饰器修复技术:四、递归函数......
  • 多参装饰器/多层语法糖/递归函数
    目录今日内容概要1.多层语法糖2.有参装饰器3.装饰器模板4.装饰器修复技术5.递归函数6.作业今日内容概要多层语法糖有参装饰器装饰器模板装饰器修复技术递归函数练......
  • ALV Header Item 多层显
    ​​​​​代码参考的​​http://blog.sina.com.cn/s/blog_5ccd375b0100bia3.html​​格式稍作整理:*&------------------------------......
  • python(闭包函数与装饰器)
    今日内容概要global与nonlocal函数名的多种用法闭包函数装饰器简洁介无参装饰器装饰器模板装饰器语法糖及修复技术global和nonlocalmoney=666......
  • 装饰器
    今日内容概要globaandnonlocal函数名的多种用法闭包函数装饰器简介无参装饰器有参装饰器装饰器模板装饰器语法糖及修复技术多层装饰器今日内容详细globaan......
  • 闭包函数与装饰器
    global与nonlocal'''global'''money=666defindex(): globalmoneymoney=100index()print(money)"""局部名称空间直接修改全局名称空......
  • 闭包函数与装饰器
    闭包函数与装饰器目录闭包函数与装饰器一、global与nonlocal二、函数名的多种用法三、闭包函数四、装饰器简介五、装饰器推导流程六、装饰器模板七、装饰器语法糖八、作业......
  • 25. 函数名的多种用法;26. 闭包函数;27. 装饰器
    25.函数名的多种用法★★★★★函数就是多了传参与返回值★★★★★函数名也是绑定的一个内存地址,只是该内存地址存放的是一段代码块。函数名(),如“fun()”,'''执行'''......