code: def as_session(name_or_func):  # decorator
      
      if callable(name_or_func):  # no name provided
          func = name_or_func
          name = func.__name__
          name = "".join([(' ' + x) if x.isupper() else x for x in name])
          name = name.replace('_', ' ')
          return as_session(name)(func)  # deco(func) -> deco(name)(func)
      else:
          name = name_or_func
  
      def get_func(func):
          @wraps(func)
          def wrapper(*args, **kwargs):
              start()
              title(name)
              result = func(*args, **kwargs)
              end()
              return result
          return wrapper
      return get_func
docs: print start/title/end info before and after the function call
  
      Args:
          title: title will show after the start, if has any