zoukankan      html  css  js  c++  java
  • Python基础课:装饰器和闭包

    #4.装饰器
    #闭包
    def fx(x):
        x += 1
        def fy(y):
            return x*y
        return fy
     
    def f1(func):
        #print('f1 runing')
        def f2(y):
            print('f2 runing')
            return func(y) + 1
        return f2
     
    def gun(m):
        print('gun runing')
        return m*m
     
    #f1(gun)
    #fg = f1(gun)
    def fun(m):
        print('f2 runing')
        return gun(m) + 1
    #fg(1)
    #fun(1)
     
    @f1
    def deco(m):
        print('这是deco')
        return m*m  #这里通过装饰器的作用,实现给deco的返回值加 1 的功能
     
    """
    打个比方,正常人都会穿鞋,但是呢有些人在鞋子里面就会放个增高鞋垫,这个增高鞋垫
    不影响穿鞋子,但是呢会让穿的人看上去更高一点,装饰器就像这个增高鞋垫一样,
    它不影响函数的正常使用,但是可以给函数增加更多的功能
    """
    import time
    def run_time(func):
        def new_fun(*args,**kwargs):
            t0 = time.time()
            print('star time: %s'%(time.strftime('%x',time.localtime())) )
            back = func(*args)
            print('end time: %s'%(time.strftime('%x',time.localtime())) )
            print('run time: %s'%(round(time.time() - t0),4)
            return back
        return new_fun
         
    @run_time
    def test():
        for i in range(1,10):
            for j in range(1,i+1):
                print('%dx%d=%2s'%(j,i,i*j),end = ' ')
            print ()
     
     
    class Test_Class:
        def __init__(self,func):
            self.func = func
             
        def __call__(self):
            print('')
            return self.func
     
     
    @Test_Class
    def fun_test():
        print('这是个测试函数')
     
    #fun_test()()
     
    #4.类装饰器
    class Rectangle:
        def __init__(self,length,width):
            self.width = width
            self.length = length
        def area(self):       #实例方法
            areas = self.length * self.width
            return areas
         
        @property  #就像访问属性一样访问方法
        def fun(self):
            return self.width*self.length
         
        @staticmethod  #不用传self
        def func():
            print('staticmethod func')
             
        @classmethod
        def show(cls):
            print(cls)
            print('show fun')
     
     
    e = Rectangle(3,4)
    f = Rectangle(6,8)
  • 相关阅读:
    Canvas
    FastDFS 下载与安装
    Oracle 表空间错误集锦
    Sql Server 网络配置
    telnet 功能启用并测试端口是否正常
    UIBarButtonItem 上按钮切换/隐藏的简单例子 转载
    UIScrollView详解
    warning:performSelector may cause a leak because its selector is unknown
    dispatch_once优化代码性能 转
    UIView 和 CALayer的那点事
  • 原文地址:https://www.cnblogs.com/yuebei/p/7101194.html
Copyright © 2011-2022 走看看