首页 > 其他分享 >有参装饰器及递归函数

有参装饰器及递归函数

时间:2022-10-12 21:55:42浏览次数:51  
标签:index return 函数 递归函数 器及 kwargs 装饰 def

昨日内容回顾

  • global与nonlocal关键字

    global 函数体内部调用全局名称空间内的变量。

    nonlocal 函数嵌套后,内部函数调用外部函数名称空间内的变量。

  • 闭包函数

    函数嵌套时,内部函数含有外部函数名称空间内的变量名。

    闭包函数主要用来为内部函数传参。

  • 装饰器简介

    装饰器本身是一个函数,主要功能是为原函数添加新的功能同时不改变原函数的调用方式。

  • 装饰器模板

    def outer(func_name):
        def inner(*args, **kwargs):
            res = func_name(*args, **kwargs)
            return res
        return inner
    
  • 装饰器语法糖

    语法糖可自动将下方紧跟的函数的函数名作为第一个参数传给@后的函数。

今日内容概要

  • 多层语法糖的执行顺序
  • 有参装饰器
  • 装饰器的修复
  • 递归函数

今日内容详细

多层语法糖的执行顺序

多重装饰器的形式如下:

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')
index()

语法糖执行顺序如下:

@outer3 → index = outer3(index) → wrapper3
@outer2 → wrapper3 = outer2(wrapper3) → wrapper2
@outer1 → wrapper2 = outer1(wrapper2) → wrapper1
→  index = wrapper1

执行阶段顺序如下:

wrapper1() → wrapper2() → wrapper3()

有参装饰器

有参装饰器的主要功能是为装饰器内部函数传入额外的参数。有参装饰器模板如下:

def wrapper(parameter_name):
    def outer(func_name):
        def inner(*args, **kwargs):
            res = func_name(*args, **kwargs)
            return res
        return inner
    return outer

有参装饰器可以一次性传入多个参数,因此两层装饰器即可满足额外传参要求。

装饰器的修复

使用装饰器后,通过help方法可以查看函数的注释,使用help方法可查看两个函数的区别。装饰器的修复可以实现装饰器的以假乱真,造成新函数与原函数完全相同的假象。

修复装饰器的方法

装饰器函数定义上一行加上:

from functools import wraps

然后在装饰器内部函数定义上一行加上:

@wraps(func_name)

递归函数

函数的递归调用

一种是直接调用,函数直接调用自身:

def index():
    print('from index')
    index()

另一种是间接调用,通过调用其他函数间接调用自身:

def index():
    print('from index')
    func()
    
def func():
    print('from func')
    index()

python解释器默认的递归深度为1000,实际运行可能调用次数在995-1000之间。

递归函数的基本特点

  • 函数直接或间接调用自己。
  • 函数的调用每次调用均比上一次调用简单,且有明确的结束条件。

递归函数的基本格式

def func(n):
    if n == 1:	
        return res
    return func(n-1) +1

标签:index,return,函数,递归函数,器及,kwargs,装饰,def
From: https://www.cnblogs.com/akazukis/p/16786242.html

相关文章

  • 多层装饰器
    目录今日内容概要今日内容详解多层语法糖有参装饰器装饰器模板装饰器修复技术递归函数今日内容概要多层语法糖有参装饰器装饰器模板装饰器修复技术递归函数今日内......
  • 多层语法糖、有参装饰器、及递归函数
    多层语法糖、有参装饰器、及递归函数目录多层语法糖、有参装饰器、及递归函数一、多层语法糖二、有参装饰器三、装饰器模板四、装饰器修复技术五、递归函数六、昨日作业详......
  • 多层语法糖,有参装饰器,递归函数
    多层语法糖deffunc1(a1):#1定义了函数func1#14func1(foo2) print('加载了func1')#15加载了func1 deffoo1(*args,**kwargs): print('执行了foo1')......
  • 装饰器补充和递归函数
    装饰器补充和递归函数多层语法糖问题我们在写代码时可能会遇到同一个函数用多个语法糖来装饰,那么他们之间的关系是什么,怎么执行的就需要看一下下面这段代码了defoutter......
  • python 函数装饰器
    今日内容概要作业讲解多层语法糖问题有参装饰器装饰器修复技术递归函数算法之二分法今日内容详细多层语法糖defoutter1(func1):print('加载了outter1......
  • 多层语法糖、装饰器、递归函数
    多层语法糖、装饰器、递归函数目录多层语法糖、装饰器、递归函数一、多层语法糖二、有参装饰器三、装饰器模板1、最常用的无参装饰器2、不常用的有参装饰器四、装饰器修复......
  • 装饰器、递归函数,语法糖
    目录作业讲解多层语法糖问题有参装饰器装饰器模版装饰器修复技术递归函数作业作业讲解1.编写一个用户认证装饰器函数:registerlogintransferwithdraw基本要求......
  • day13装饰器以及递归函数
    目录今日内容概要今日内容详细多层语法糖有参装饰器装饰器模板null装饰器修复技术递归函数作业今日内容概要多层语法糖问题有参装饰器装饰器修复技术递归函数今......
  • python 装饰器
    参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017451662295584https://blog.csdn.net/zhh763984017/article/details/120072425......
  • 装饰器的补充与递归函数
    多层语法糖defoutter1(func1):print('加载了outter1')defwrapper1(*args,**kwargs):print('执行了wrapper1')res1=func1(*args,**kwarg......