zoukankan      html  css  js  c++  java
  • python 装饰器 传递参数简单案例

    def debug(func):

         def wrapper(*args, **kwargs): # 指定宇宙无敌参数

        print "[DEBUG]: enter {}()".format(func.__name__)

        print 'Prepare and say...',

             return func(*args, **kwargs)

     return wrapper # 返回

    @debug

    def say(something):

      print "hello {}!".format(something)

    Python提供了可变参数*args和关键字参数**kwargs,有了这两个参数,装饰器就可以用于任意目标函数了。

    参考:https://www.cnblogs.com/cicaday/p/python-decorator.html

    我自己的例子

    #!/usr/bin/env python
    #todo use decorator to decorate the function that need debug and its function name
    def debug(f):
      def wrapper(*args,**kwargs):
        print("this is the name of function: {0}".format(f.__name__))
        if kwargs['username'] != 'admin':
          raise Exception('you need to be admin') 
        f(*args,**kwargs) #装饰器内部函数的参数等于被修饰函数的参数
      return wrapper


    @debug
    def say_hi(sth,username):

      print("this is position args {0}".format(sth))
      print("i am the master: {0}".format(username))
    if __name__ == '__main__':
      say_hi('first args',username='admin')
      say_hi('first args',username='haha')

    *args  -- 相当于 列表   **kwargs -- 相当于字典

  • 相关阅读:
    python第十一天
    python第七天(字符编码,字符与字节,文件操作)
    python第六天(元组、字典、集合)
    python第五天
    python第四天
    根据数据库文件,查找对应的数据库
    Windows 路径问题
    32位及64位操作系统的程序问题
    好玩的获取目录信息的例子[C#]
    C# 反射相关的东西
  • 原文地址:https://www.cnblogs.com/hixiaowei/p/9049764.html
Copyright © 2011-2022 走看看