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)

     

     

     

  • 相关阅读:
    Java设计模式之原型模式
    Java设计模式之单例模式
    Java设计模式之抽象工厂模式
    Java设计模式之工厂方法模式
    redis常用配置参数详解
    Maven版本的ssm框架项目常见依赖pom.xml
    Maven中setting.xml配置Demo
    Linux中安装jdk
    Linux中查看jdk安装目录、Linux卸载jdk、rpm命令、rm命令参数
    Hibernate主键生成策略
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10425309.html
Copyright © 2011-2022 走看看