例如@classmethod,@staticmethod的本质就是函数装饰器,其中,classmethod和staticmethod都是python的内置函数

  使用@引用已有的函数后,可用于修饰其他函数,装饰被修饰的函数。我们可以开发自定义的函数装饰器

  装饰的过程可以分为

  1. 将被修饰的函数作为参数传递给@符号引用的函数
  2. 将被修饰的函数换成装饰函数的返回值

代码实例

 1 def funA(fu):
2 print("a")
3 fu()#执行被传入的参数
4 return "b"
5 @funA
6 def funb():
7 print("c")
8 print(funb)
9 """
10 程序的运行过程:
11 1.将funb作为参数传递给装饰函数funA,也就是@funA相当于执行的funA(fu nb)
12 2.将funb替换成装饰函数的返回值
13 """

运行结果

a
c

b

  通过这个例子,我们已经对装饰器的执行关系有了一定的了解和认识。可能有人认为,被修饰的函数已经变成了字符串。

注意:

  被修饰的函数总是被替换成函数装饰器的返回值,因此被修饰的函数会变成怎么样完全由函数修饰器的返回值来决定的

代码示例:

14 def jiugongge(fu):
15 def do():
16 num = int(input())
17 a = [[0 for i in range(num)]for i in range(num)]
18 #将第一行中间那列的值定为1
19 a[0][num//2] = 1
20 x = 0
21 y = num//2
22 #将2以后的值依次填入列表中
23 for i in range(1,num*num):
24 j = i + 1
25 x = x - 1
26 y = y + 1
27 if x < 0 and y <= num - 1:
28 x = x + 3
29 a[x][y] = j
30 elif x < 0 and y > num - 1:
31 x = x + 2
32 y = y - 1
33 a[x][y] = j
34 elif y > num - 1:
35 y = 0
36 a[x][y] = j
37 else:
38 if a[x][y] == 0:
38 if a[x][y] == 0:
39 a[x][y] = j
40 else:
41 x = x + 2
42 y = y - 1
43 a[x][y] = j
44
45 for n in range(num):
46 for m in range(num):
47 print(str(a[m][n]).rjust(2,"0"),end = "\t")
48 print()
49 return do
50 @jiugongge
51 def funcation():
52 print("funcation")
53 funcation()

运行结果:

3
08      03      04

01      05      09

06      07      02

此时的funcation函数已经被替换成了do函数,应为修饰器函数的返回值是do函数
调用funcation其实就是在调用do函数

python-@函数装饰器的更多相关文章

  1. Python函数装饰器原理与用法详解《摘》

    本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...

  2. python函数-装饰器

    python函数-装饰器 1.装饰器的原则--开放封闭原则 开放:对于添加新功能是开放的 封闭:对于修改原功能是封闭的 2.装饰器的作用 在不更改原函数调用方式的前提下对原函数添加新功能 3.装饰器的 ...

  3. Python函数装饰器高级用法

    在了解了Python函数装饰器基础知识和闭包之后,开始正式学习函数装饰器. 典型的函数装饰器 以下示例定义了一个装饰器,输出函数的运行时间: 函数装饰器和闭包紧密结合,入参func代表被装饰函数,通过 ...

  4. Python 函数装饰器

    首次接触到装饰器的概念,太菜啦! Python 装饰器可以大大节省代码的编写量,提升代码的重复使用率.函数装饰器其本质也是一个函数,我们可以把它理解为函数中定义了一个子函数. 例如我们有这么一个需求, ...

  5. Python @函数装饰器及用法

    1.函数装饰器的工作原理 函数装饰器的工作原理是怎样的呢?假设用 funA() 函数装饰器去装饰 funB() 函数,如下所示: #funA 作为装饰器函数 def funA(fn): #... fn ...

  6. Python @函数装饰器及用法(超级详细)

    函数装饰器的工作原理是怎样的呢?假设用 funA() 函数装饰器去装饰 funB() 函数,如下所示: #funA 作为装饰器函数 def funA(fn): #... fn() # 执行传入的fn参 ...

  7. Python高手之路【四】python函数装饰器

    def outer(func): def inner(): print('hello') print('hello') print('hello') r = func() print('end') p ...

  8. python 函数 装饰器 内置函数

    函数 装饰器 内置函数 一.命名空间和作用域 二.装饰器 1.无参数 2.函数有参数 3.函数动态参数 4.装饰器参数 三.内置函数 salaries={ 'egon':3000, 'alex':10 ...

  9. Python 函数装饰器简明教程

    定义类的静态方法时,就使用了装饰器.其实面向对象中的静态方法都是使用了装饰器. @staticmethod def jump(): print(" 3 meters high") ...

  10. Python高手之路【四】python函数装饰器,迭代器

    def outer(func): def inner(): print('hello') print('hello') print('hello') r = func() print('end') p ...

随机推荐

  1. js map(Number) All In One

    js map(Number) All In One map() 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值. let newArray = arr.map(callb ...

  2. js multiple packages & lerna.js

    js multiple packages & lerna.js

  3. Chrome Canary crashed bug

    Chrome Canary crashed bug Aw, Snap https://support.google.com/chrome/?p=e_awsnap clear cache, 使用隐身模式 ...

  4. Node.js Backend Developer

    Node.js Backend Developer refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  5. PWA & Service Workers 版本更新 bug

    PWA & Service Workers 版本更新 bug PWA & Service Worker https://developer.mozilla.org/zh-CN/docs ...

  6. W3C & 弹幕

    W3C & 弹幕 弹幕用例规范 Draft Community Group Report 21 August 2020 refs https://w3c.github.io/danmaku/u ...

  7. holy shit CSDN

    holy shit CSDN 垃圾 CSDN 到处都是垃圾文章, 无人子弟 到处都是垃圾广告,看的恶心 毫无底线,窃取别人的知识成果,毫无版权意识 垃圾爬虫,垃圾小号 ...等等 Google Sea ...

  8. regex read once bug

    regex read once bug read once bug StackOverflow Question https://stackoverflow.com/questions/5916796 ...

  9. Objec.assign & bug

    Objec.assign & bug shallow copy https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Referenc ...

  10. 翻译:《实用的Python编程》01_06_Files

    目录| 上一节(1.5 列表) | 下一节 (1.7 函数) 1.6 文件管理 大多数的程序需要从某处读取输入.本节讨论文件访问. 文件输入和输出 打开一个文件: f = open('foo.txt' ...