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)

 

 

 

posted @ 2019-02-24 08:33  天子骄龙  阅读(142)  评论(0编辑  收藏  举报