跳至主要内容

博文

目前显示的是 十月, 2017的博文

Python | 翻译:Python的装饰器(decorator)

这几天查装饰器的资料时,意外发现了stackoverflow上一篇很不错的文章,所以就翻译了过来,权当加深自己的理解。  原网址: How to make a chain of function decorators? 是这样的,有人问了一个问题: 能不能用两个装饰器,像这样 @makebold @makeitalic def say (): return "Hello" 可以返回这种东西: "<b><i>Hello</i></b>" 就是HTML语句。 下面是回答: Decorator基础 Python的函数都是对象 要理解decorators,首先要明白在Python中,函数都是对象。来看一个简单的例子: 把这一点牢记于心,我们很快就会用到它。 Python的函数有另外一个有趣的特性:它们可以在另一个函数的内部定义! 函数引用 你已经知道函数都是对象了。因此,函数 可以赋值给一个变量 可以在另一个函数内部定义 这意味着一个函数可以返回另一个函数。 这不是全部!  如果你可以返回一个函数,这意味着你也可以把函数作为一个参数。 现在,你已经具备了所有理解decorators所需要的知识了。   不难看出,decorators其实就是“包装纸”,这意味着他们可以让你在它们装饰好的函数前后执行你想要的代码,而不用改动函数本身。 自制装饰器 如何手工制作装饰器呢: 现在,你可能希望,每次你调用  a_stand_alone_function 的时候,实际调用的是 a_stand_alone_function_decorated 。这其实很容易,只需要用 my_shiny_new_decorator 返回的函数来覆盖 a_stand_alone_function 。 揭秘decorators 使用decorator语法来实现前面的例子: 这就是全部了,非常简单。 @decorator 其实就是 another_stand_alone_function = my_shiny_new_decorator ( anothe...