zoukankan      html  css  js  c++  java
  • python-@函数装饰器

      例如@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 = "	")
     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函数

    笨鸟先飞
  • 相关阅读:
    LinuxMySQL主从复制原理图
    flask中间件请求流程
    flask02
    flask01
    笔记本电脑播放声音前后会有吱吱声
    筛法欧拉函数
    矩阵快速幂
    最短路 P1144 最短路计数【Dijkstra堆优化/SPFA】
    SPFA算法以及负环判断【模板】
    最短路 P1629 邮递员送信 【反向图求最短路】
  • 原文地址:https://www.cnblogs.com/zoutingrong/p/13893213.html
Copyright © 2011-2022 走看看