zoukankan      html  css  js  c++  java
  • python装饰器的一些理解

    以一个带参数的函数的装饰器为例子

    def debug(func):
        def wrapper(something):     # 指定一毛一样的参数
            print("[DEBUG]: enter {}()".format(func.__name__))
            return func(something)  #这里写func(something)好像也可以
        return wrapper              # 返回包装过函数
    
    @debug
    def say(something):
        print("hello {}!".format(something))
    
    say("yfc")
    

    以现在初学的理解是相当于把被装饰的函数作为参数,重写一个包含被装饰函数内容的函数,最后返回一个新函数。

    **但是有一些函数的参数我们是不知道的,这个时候可以使用*args,*kwargs来填充参数(args把参数打包成元组,**kwargs把元素打包成字典)
    这个时候上面的代码就可以改为

    def debug(func):
        def wrapper(*args,**kwargs):     # 指定一毛一样的参数
            print("[DEBUG]: enter {}()".format(func.__name__))
            return func(*args,**kwargs)  #这里写func(*args,**kwargs)好像也可以
        return wrapper              # 返回包装过函数
    
    @debug
    def say(something):
        print("hello {}!".format(something))
    
    

    这差不多就是装饰器的初级用法了。

  • 相关阅读:
    python sys 模块
    python os 模块
    JS Dictionary
    JS Array
    JS String
    JS面向对象
    WPF中INotifyPropertyChanged用法与数据绑定
    JS的函数
    JS类型转换
    JS变量的作用域
  • 原文地址:https://www.cnblogs.com/yfc0818/p/11072680.html
Copyright © 2011-2022 走看看