
修饰器本质上是一个函数,它接收一个函数作为参数并返回一个修饰过的新函数,一般来说不会改变函数的功能,只是在外围增加一些辅助性的检查或小功能。
在拙作《Python程序设计开发宝典》中有下面这样一段用来演示修饰器用法的代码:

有读者朋友问:两个修饰器before和after,哪个先起作用,哪个后起作用呢?这段代码好像看不出来,其实对代码稍微修改一下即可得到答案。
修改一:

修改二:

修改三:

通过上面的验证可知,在使用修饰器的两种形式中,距离被修饰的函数近的修饰器先起作用。
1、董付国老师Python系列教材,亚马逊、京东、当当、天猫均有销售:
1)《Python程序设计(第2版)》(2018年5月第6次印刷)
出版社官方链接(亚马逊、京东、当当均有销售):https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-16232114860.18.24a52226hIi8Bj&id=534581929248&rn=9311dcbc68fffcf57b7ae352800e485d&abbucket=6
2)《Python可以这样学》(2018年2月第5次印刷)(本书已发行繁体版)
出版社官方链接(亚马逊、京东、当当均有销售):https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-16232114860.16.24a52226hIi8Bj&id=544817105410&rn=9311dcbc68fffcf57b7ae352800e485d&abbucket=6
3)《Python程序设计开发宝典》(2018年2月第3次印刷)
出版社官方链接(亚马逊、京东、当当均有销售):https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-16232114860.52.24a52226hIi8Bj&id=556093887133&rn=9311dcbc68fffcf57b7ae352800e485d&abbucket=6
4)《中学生可以这样学Python》2018年5月第2次印刷)
出版社官方链接(亚马逊、京东、当当均有销售):https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-16232114860.20.24a52226hIi8Bj&id=560808221053&rn=9311dcbc68fffcf57b7ae352800e485d&abbucket=6
5)《Python程序设计基础(第2版)》(2018年5月第2次印刷)
出版社官方链接(亚马逊、京东、当当均有销售):https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-16232114860.24.24a52226hIi8Bj&id=565581275846&rn=9311dcbc68fffcf57b7ae352800e485d&abbucket=6
6)《玩转Python轻松过二级》(2018年5月隆重上架)
出版社官方链接(亚马逊、京东、当当均有销售):https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-16232114860.84.24a52226hIi8Bj&id=569250004069&rn=9311dcbc68fffcf57b7ae352800e485d&abbucket=6