python函数装饰器

Posted 多测师张sir

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python函数装饰器相关的知识,希望对你有一定的参考价值。

装饰器(Decorators)

是 Python 的一个重要部分

简单地说:他们是修改其他函数的功能的函数。

他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。

大多数初学者不知道在哪儿使用它们,所以我将要分享下,哪些区域里装饰器可以让你的代码更简洁。

首先,让我们讨论下如何写你自己的装饰器。

这可能是最难掌握的概念之一。

我们会每次只讨论一个步骤,这样你能完全理解它。

1.一切皆对象

def func(name=\'duoceshi\'):
    return \'hello\' + name

print(func())
输出:hello duoceshi

#将函数传递给一个变量
variable = func
print(variable) 
输出: <function func at 0x000001DD9F7E7048> #函数对象
print(variable()) #带括号打印
输出:hello duoceshi

del func
print(func)
输出:NameError: name \'func\' is not defined

print(variable())
输出:hello duoceshi

2.在函数中定义函数

def func():
    
    print(\'welcome to 多测师\')
    
    def func1():
         
        print(\'welcome to 深圳多测师\')
    
    def func2():
        
        print(\'welcome to 广州多测师\')
    
    func1()
    func2()

func()
输出:
welcome to 多测师
welcome to 深圳多测师
welcome to 广州多测师
#无论何时调用func(),func1()和func2()都会被调用
#func1()与func2()在func()函数外是不会被调用的

func1()
输出:NameError: name \'func1\' is not defined

3.从函数中返回函数

def func(name=\'多测师\'):
    
    return \'welcome to 多测师\'
    
    def func1():
         
        return \'welcome to 深圳多测师\'
    
    def func2():
        
        return \'welcome to 广州多测师\'
    
    if name == \'多测师\':
        return func1
            
    else:
        return func2

variable = func()
print(variable)
输出:<function func.<locals>.func1 at 0x00000157A166CD08>

print(variable())
输出:welcome to 深圳多测师

4.讲函数做为参数传给另一个函数

def func():
    return \'welcome to 多测师\'

def func1(name):
    print(\'welcome to 深圳多测师\')
    print(name())

func1(func)
输出:
welcome to 深圳多测师
welcome to 多测师

5.创建一个装饰器

def func(name):

    def func1():
        name()
        print(\'我是函数的新功能\')

    return func1

def function():
    print(\'welcome to 多测师\')

#直接调用第二个函数
# function()
#输出:
# welcome to 多测师

#传统调用方法
variable = func(function)
variable()
输出:
welcome to 多测师
我是函数的新功能

6.使用@符调用装饰器

def func(name):

    def func1():
        name()
        print(\'我是函数的新功能\')

    return func1

@func
def function():
    print(\'welcome to 多测师\')


function()
输出:
welcome to 多测师
我是函数的新功能

 

以上是关于python函数装饰器的主要内容,如果未能解决你的问题,请参考以下文章

python 装饰器

[TimLinux] Python 装饰器

python装饰器

python函数装饰器

Python装饰器

python装饰器