• 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)

     

     

     

  • 相关阅读:
    webpack
    Js数组和字符串常用方法
    Vue.js 2.0 快速上手
    雅虎前端优化的35条军规
    前端问题大杂烩
    Java和js的区别,以及Java和c的区别
    前后端联调
    99%的人都理解错了HTTP中GET与POST的区别
    vue项目目录
    vuex入门
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10425309.html
Copyright © 2020-2023  润新知