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 #存钱
  • 相关阅读:
    poj1661【DP,左右两端dp】
    hdoj1074【A的无比爆炸】
    hdoj1024【DP.最 大 m 字 段 和】(写完我都怕。。。不忍直视。。)
    qq教xixi写模拟加法【非常爆炸】
    错排公式
    POJ3616【基础DP】
    hdoj1257【疑问】(贪心)
    【弱的C艹之路。。未完待续】
    hdoj1728【搜索的两种写法】
    hdoj1001【智障了。。。】
  • 原文地址:https://www.cnblogs.com/LXP-Never/p/9327093.html
Copyright © 2011-2022 走看看