code: def log(func):
      
  
      # wraps 这个装饰器会将 func 的 doc 和 __name__ 复制过来
      # 否则在 wrapper 中调用 func.__name__ 输出的就是 wrapper
      @wraps(func)
      def wrapper(*args, **kwargs):
          print('before call %s' % func.__name__)
          ret = func(*args, **kwargs)
          print('after call %s' % func.__name__)
          return ret
  
      return wrapper
docs: 打印函数运行日志的装饰器
      :param func:
      :return: