装饰器

本片笔记学习自:Improve Your Python: Decorators Explained

  • 首先需要知道的两个点:
    1.函数可以作为参数
    2.函数可以返回函数(生产函数)

  • 前进

Can we create a function that takes a function as a parameter and returns a function as the result. Would that be useful?

这样我们就可以接收一个函数,然后将其封装好后送出另外一个函数出去。

  • 例子
def currency(f):
    def wrapper(*args, **kwargs):
        return '$' + str(f(*args, **kwargs))

    return wrapper

在字符串之前加上’$‘。

    @currency
    def price_with_tax(self, tax_rate_percentage):
        """Return the price with *tax_rate_percentage* applied.
        *tax_rate_percentage* is the tax rate expressed as a float, like "7.0"
        for a 7% tax rate."""
        return price * (1 + (tax_rate_percentage * .01))

加上语法糖,表示price_with_tax已经被装饰,装饰的方式在currency中定义。

  • 一点点的“副作用”
    我们在装饰的同时也将函数变成了price_with_tax,.name 和.doc都会是currency的,我们需要对装饰器进行一些修改:
from functools import wraps

def currency(f):
    @wraps(f)
    def wrapper(*args, **kwargs):
        return '$' + str(f(*args, **kwargs))

    return wrapper
  • 威力
    装饰器的作用,一言以蔽之:

This notion of wrapping a function with additional functionality without changing the wrapped function is extremely powerful and useful.

Flask框架利用装饰器来给不同的路径添加不同的功能

@app.route('/')
def hello_world():
    return 'Hello World!'

装饰器可以添加参数的,下一次讲类装饰器再讲。

看完下面你就知道装饰器的形式了:

用处:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Python装饰器的高级用法(翻译) 原文地址https://www.codementor.io/python/t...
    城南道阅读 10,238评论 1 22
  • 装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返...
    时间之友阅读 6,929评论 0 3
  • 本文为《爬着学Python》系列第四篇文章。从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新。 在Pytho...
    SyPy阅读 7,229评论 4 11
  • 美轮美奂的课到底会给学生什么,老师需要不断超越。跟孩子说他们能听懂的课。先站在儿童的立场,然后才是文化传承。 万物...
    草原上的小马阅读 3,954评论 0 0
  • “明天你是否会想起,昨天你写的日记。明天你是否还惦记曾经最爱哭的你。老师们早已想不起,猜不出问题的你,我也是偶然翻...
    竹溪晴雨阅读 4,127评论 2 9

友情链接更多精彩内容