例如@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. Leetcode(868)-二进制间距

    给定一个正整数 N,找到并返回 N 的二进制表示中两个连续的 1 之间的最长距离. 如果没有两个连续的 1,返回 0 . 示例 1: 输入:22 输出:2 解释: 22 的二进制是 0b10110 . ...

  2. Mybatis基础:Mybatis映射配置文件,Mybatis核心配置文件,Mybatis传统方式开发

    一.Mybatis快速入门 1.1 框架介绍 框架是一款半成品软件,我们可以基于这个半成品软件继续开发,来完成我们个性化的需求! 框架:大工具,我们利用工具,可以快速开发项目 (mybatis也是一个 ...

  3. Excel 如何固定表头

    Excel 如何固定表头 视图-冻结窗格-冻结首行 EXCEL如何设置固定表头 一.首先打开Excel表格,如果你的表头只有一行,那么直接选择"视图-冻结窗格-冻结首行"就可以了. ...

  4. 如何在github实现 github pages (暨个人blog) websites for you and your projects.

    http://xgqfrms.github.io/xgqfrms/ 步骤如下: 1.GitHub Pages https://pages.github.com/ 2.Generate a site, ...

  5. 如何在 Apple Watch S6上离线播放音乐

    如何在 Apple Watch S6上离线播放音乐 Apple Watch 离线播放音乐 营销策略,捆绑销售 Apple Watch + AirPods + Apple Music Apple Wat ...

  6. leetcode bug & 9. Palindrome Number

    leetcode bug & 9. Palindrome Number bug shit bug "use strict"; /** * * @author xgqfrms ...

  7. 封装 React Native 原生组件(iOS / Android)

    封装 React Native 原生组件(iOS / Android) 在 React Native中,有很多种丰富的组件了,例如 ScrollView.FlatList.SectionList.Bu ...

  8. APP 跳转到支付包小程序

    APP 跳转到支付包小程序 APP选择支付宝支付,会跳转到支付宝小程序再支付 支付包 小程序 我司有自己的APP.生活号,小程序,这种情况下如何和小程序关联,跳转到小程序里去,做到无缝对接? 其实,小 ...

  9. 关于PCA主成分分析的一点理解

    PCA 即主成分分析技术,旨在利用降维的思想,把多指标转化为少数几个综合指标. 假设目前我们的数据特征为3,即数据维度为三,现在我们想将数据降维为二维,一维: 我们之前的数据其实就是三维空间中的一个个 ...

  10. hadoop环境搭建:完全分布式

    目录 1.硬件配置 2.软件版本 3.准备工作 3.1.建立虚拟机,网络设置为桥接模式 3.2.更改主机名 3.3.绑定主机名和IP,建立各主机间的联系 3.4.关闭防火墙 3.5.配置宿主机host ...