Python 中的装饰器( Decorators )使用详解

装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。大多数初学者不知道在哪儿使用它们,所以我将要分享下,哪些区域里装饰器可以让你的代码更简洁。

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

一切皆对象

首先我们来理解下 Python 中的函数

def hi(name="youdaily"):
    return "hi " + name

print(hi())

输出

'hi youdaily'

我们甚至可以将一个函数赋值给一个变量,比如

greet = hi
# 我们这里没有在使用小括号,因为我们并不是在调用hi函数
# 而是在将它放在 greet 变量里头。我们尝试运行下这个

print(greet())

输出

'hi youdaily'

如果我们删掉旧的 hi 函数,看看会发生什么!

del hi
print(hi())
#outputs: NameError

print(greet())

输出

'hi youdaily'

在函数中定义函数

刚才那些就是函数的基本知识了。我们来让你的知识更进一步。在Python中我们可以在一个函数中定义另一个函数:

def hi(name="youdaily"):
    print("now you are inside the hi() function")

    def greet():
        return "now you are in the greet() function"

    def welcome():
        return "now you are in the welcome() function"

    print(greet())
    print(welcome())
    print("now you are back in the hi() function")

hi()

输出

now you are inside the hi() function
now you are in the greet() function
now you are in the welcome() function
now you are back in the hi() function

上面展示了无论何时你调用hi(), greet()和welcome()将会同时被调用。
然后greet()和welcome()函数在hi()函数之外是不能访问的,比如:

greet()
NameError: name 'greet' is not defined

那现在我们知道了可以在函数中定义另外的函数。也就是说:我们可以创建嵌套的函数。现在你需要再多学一点,就是函数也能返回函数。

从函数中返回函数

其实并不需要在一个函数里去执行另一个函数,我们也可以将其作为输出返回出来:

def hi(name="youdaily"):
    def greet():
        return "now you are in the greet() function"

    def welcome():
        return "now you are in the welcome() function"

    if name == "youdaily":
        return greet
    else:
        return welcome

a = hi()
print(a)

输出


你可能感兴趣的:(Python 中的装饰器( Decorators )使用详解)