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

    1 无参装饰器,包装无参函数

    #无参装饰器包装无参函数
    def decorator(func):
        print('我是装饰器')
        return func
    
    def decorator1(func):
        print('我是装饰器1')
        return func
    
    
    @decorator
    @decorator1
    def function():
        print('我是函数')
    function()
    '''
    执行顺序为:
    decorator1() -> decorator() -> function()
    '''
    
    #装饰器就相当于下面的调用
    #decorator(function())

    2 无参装饰器,包装有参函数

    #无参装饰器包装有参函数
    def decorator(func):
        def x(*args,**kwargs):#处理传入函数的参数
            print('装饰器开始')
            func(*args,**kwargs)#调用函数
            print('装饰器里面函数参数:',args,kwargs)
            print('装饰器结束')
        return x
    @decorator
    def function(age,name,sex,tel=110):
        print('我是函数参数:',age,name,sex,tel)
    
    function(18,'小王','')

    3 带参装饰器,包装无参数函数

    #带参装饰器包装无参数函数
    '''
    在装饰器的内部在定义一个装饰器,来修饰函数
    '''
    def decorator(decorator_arg):
        print('我是装饰器参数:',decorator_arg)     #装饰器参数
        def newdecorator(func):      #最终返回的函数,来调用被修饰的函数
            return func         #返回被修饰的函数
        return newdecorator
    
    @decorator('这是装饰器参数')
    def function():
        print('我是函数')
    
    function()

    4 带参数装饰器,包装带参数函数

    #带参数装饰器,包装带参数函数
    '''
    带参数的装饰器,在内部定义一个新的装饰器从新装饰函数,
    在定义一个方法来接受函数的参数,在这个函数的内部调用函数并把函数的参数传入
    '''
    def decorator(decorator_arg):
        def newdecorator(func):#func就相当于function函数
            def x(*args,**kwargs):#处理函数的参数
                print('装饰器开始')
                func(*args,**kwargs)#调用函数
                print('装饰器结束')
                print(decorator_arg,func,args,kwargs)
            return x
        return newdecorator
    
    @decorator('我是decorator_arg')
    def function(age,name,sex,tel=110):
        print('我是函数参数:',age,name,sex,tel)
    
    function(18,'翠花',sex="")

     

  • 相关阅读:
    js 创建Table,每行3列的方式
    多线程 笔记
    WCF binding
    table 变量
    Excel数据使用sql语句导入sqlserver (64位)
    sqlserver链接服务器到Mysql
    easyui datagrid 返回数据正确 fit='true' 时不显示内容
    js设置文本框只读属性的小bug
    windows64位下的redis及memcached的安装和使用
    spring.Net (Mvc)属性依赖注入------实例化对象
  • 原文地址:https://www.cnblogs.com/yinliang-liang/p/9883890.html
Copyright © 2011-2022 走看看