zoukankan      html  css  js  c++  java
  • python 装饰器

    装饰器

    装饰器是一个函数,主要用来包装另一个函数或类,装饰器的目的在不改变原函数的情况下,对原函数进行包装,添加功能

    装饰器传入的是一个函数,返回的也是一个函数

    我们先来看一个简单的函数

    import time
    
    def sum1():
        sum = 1+ 2
        print (sum)
    
    def timeit(func):
        def test():
            start = time.clock()
            func()
            end =time.clock()
            print("time used:", end - start)
        return test
    
    sum1 = timeit(sum1)
    sum1()

    上面那段代码其实就实现了装饰器的功能,对sum1函数进行包装,添加了计时功能。

    注意:timeit传入的是函数名,如果在函数名后面加上(),则是执行这个函数,如果只是函数名,这是传参函数。

    python就提出了装饰器来降低上面字符串的输入量

    import time
      
    def timeit(func):
         def test():
             start = time.clock()
             func()
             end =time.clock()
             print("time used:", end - start)
         return test
     
    @timeit
    def sum1():
         sum = 1+ 2
         print (sum)
    
     sum1()

    语法

      def 装饰器函数名(参数):

        语句块

        return 函数对象

      @装饰器函数名

      def 函数名(形参列表):

        语句块

     1 def mydeco(fn):
     2     def fx():
     3         print("=========这是myfunc调用之前==========")
     4         fn()
     5         print('---------这是myfunc调用之后----------')
     6     return fx
     7 
     8 @mydeco
     9 def myfunc():
    10     print("myfunc被调用")
    11 
    12 # myfunc = mydeco(myfunc)  # 原理是改变原变量绑定的函数
    13 
    14 myfunc()
    15 
    16 #=========这是myfunc调用之前==========
    17 #myfunc被调用
    18 #---------这是myfunc调用之后----------

    闭包

     1 def yanzhen(fn):    #闭包函数
     2     def fx(name,x):
     3         print("可以用if语句进行判断,进行验证,验证通过使用fn语句")
     4         fn(name,x)
     5     return fx
     6 
     7 @yanzhen
     8 def q_money(name,x):    #取钱
     9     print("取钱")     #不写return,默认返回None
    10 
    11 @yanzhen
    12 def c_money(name,x):    #存钱
    13     print("存钱")
    14 
    15 q_money("凌贤鹏",300)
    16 print("-----------------------")
    17 c_money("文庆华",500)
    18 
    19 #可以用if语句进行判断,进行验证,验证通过使用fn语句
    20 #取钱
    21 #-----------------------
    22 #可以用if语句进行判断,进行验证,验证通过使用fn语句
    23 #存钱
  • 相关阅读:
    Idea 一些常用的小工具
    玩转SpringBoot之定时任务详解
    mysql 创建自定义函数
    mysql
    一段mysql脚本,生成一些随机数时使用。
    mysql 命令行常用操作与mysql too many connections 解决方法
    如何获取多个分组之后的第一条数据
    Linux aliyun ECS CentOS8 服务器安装Redis 部署集群 ,JDK安装与Tomcat配置
    Redis 各个版本下载地址
    centos7安装mysql5.7(rpm安装版)与 Mysql 权限
  • 原文地址:https://www.cnblogs.com/LXP-Never/p/9327093.html
Copyright © 2011-2022 走看看