例如@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. javascript和XML

    一,浏览器对XML DOM的支持1,DOM2级核心 var xmldom = document.implementation.createDocument("","roo ...

  2. redis跳表

    redis使用跳表作为有序集合的底层实现之一,下面来看下跳表的结构 一.跳表的结构

  3. 7816协议时序和采用UART模拟7816时序与智能卡APDU指令协议

    7816时序 7816时一个比较早的老通讯时序了,最近项目上需要用UART模拟所以,简单学习时序. 时序比较简单,熟悉UART的一眼看着就像是串口的时序,只是他没有停止位,取而代之的就是保护时间gur ...

  4. 最新 React 源码学习笔记

    最新 React 源码学习笔记 v17.x.x 框架架构 核心算法 设计模式 编码风格 项目结构 为什么出现 解决了什么问题 有哪些应用场景 refs https://github.com/learn ...

  5. React Hooks: useDebugValue All In One

    React Hooks: useDebugValue All In One useDebugValue https://reactjs.org/docs/hooks-reference.html#us ...

  6. Nmap & ncat

    Nmap & ncat https://github.com/udacity/course-ud303 https://nmap.org/dist/nmap-7.30-setup.exe Yo ...

  7. React Hooks vs React Class vs React Function All In One

    React Hooks vs React Class vs React Function All In One React Component Types React Hooks Component ...

  8. shit instagram

    shit instagram 无法登录 我们检测到了可疑登录操作 为保护帐户安全,请获取登录帮助. email 无法验证 x*****s@e*****.com xgqfrms@example.com ...

  9. vue3 deep dive

    vue3 deep dive vue core vnode vue core render / mount / patch refs https://www.vuemastery.com/course ...

  10. uniapp 创建简单的tabs

    tabs组件 <template> <view class="tabs"> <view class="bar" :style=&q ...