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

    作用:扩展原函数的功能,使用原函数名进行调用

     

    原型-使用语法糖之前

    import time

    def func():

        print('大家好')

        time.sleep(0.1)

    def timmer(f):    #装饰器函数

        def inner():

            start = time.time()

            f()

            end = time.time()

            print(end - start)

        return inner

     

    func=timmer(func)  #func获得inner地址

    func()   #其实执行的是inner()

     

     

    使用语法糖之后—原函数没有返回值

    import time

    def timmer(f):    #装饰器函数

        def inner():

            start = time.time()

            f()

            end = time.time()

            print(end - start)

        return inner

    @timmer    #语法糖  相当于写了func=timmer(func) 要紧贴被装饰函数,装饰函数应该在他的前面

    def func():    #被装饰的函数

        print('大家好')

        time.sleep(0.1)

    func()   #其实执行的是inner()

     

     

    原函数带返回值

    import time

    def timmer(f):    #装饰器函数

        def inner():

            start = time.time()

            ret=f()

            end = time.time()

            print(end - start)

            return ret

        return inner

     

    @timmer    #语法糖  相当于写了func=timmer(func) 要紧贴被装饰函数,装饰函数应该在他的前面

    def func():    #被装饰的函数

        print('大家好')

        time.sleep(0.1)

        return '新年好'

    x=func()   #其实执行的是inner()

    print(x)

     

    原函数带参数

    import time

    def timmer(f):    #装饰器函数

        def inner(a):

            start = time.time()

            ret=f(a)

            end = time.time()

            print(end - start)

            return ret

        return inner

     

    @timmer    #语法糖  相当于写了func=timmer(func) 要紧贴被装饰函数,装饰函数应该在他的前面

    def func(a):    #被装饰的函数

        print('大家好',a)

        time.sleep(0.1)

        return '新年好'

    x=func(100)   #其实执行的是inner()

    print(x)

     

     

    自定义属性--类函数以属性形式进行访问

     

    把类中的函数隐藏为属性@property

    from math import pi

    class Circle:

        def __init__(self,r):

            self.r=r

        def zoucan(self):

            return 2*pi*self.r

        @property   #把下面的函数伪装成属性,只能用于类中的函数并没有参数的函数

        def area(self):

            return self.r**2*pi

        @area.setter       #可以修改伪装成属性的函数中某个变量

        def area(self,x):  #只能有一个参数

            self.r=x

    c1=Circle(10)

    a=c1.area

    print(a)

    c1.area=20

    a=c1.area

    print(a)

     

     

     

  • 相关阅读:
    CSS之旅——第二站 如何更深入的理解各种选择器
    CSS之旅——第一站 为什么要用CSS
    记录一些在用wcf的过程中走过的泥巴路 【第一篇】
    asp.net mvc 之旅—— 第二站 窥探Controller下的各种Result
    asp.net mvc 之旅—— 第一站 从简单的razor入手
    Sql Server之旅——终点站 nolock引发的三级事件的一些思考
    Sql Server之旅——第十四站 深入的探讨锁机制
    Sql Server之旅——第十三站 对锁的初步认识
    Sql Server之旅——第十二站 sqltext的参数化处理
    Sql Server之旅——第十一站 简单说说sqlserver的执行计划
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10425309.html
Copyright © 2011-2022 走看看