parameters: (func)
return_statement: return helper
docstring: @contextmanager decorator.
  
      Typical usage:
  
          @contextmanager
          def some_generator(<arguments>):
              <setup>
              try:
                  yield <value>
              finally:
                  <cleanup>
  
      This makes this:
  
          with some_generator(<arguments>) as <variable>:
              <body>
  
      equivalent to this:
  
          <setup>
          try:
              <variable> = <value>
              <body>
          finally:
              <cleanup>
docstring_summary: @contextmanager decorator.
docstring_tokens: @contextmanager decorator .
function: def contextmanager(func):
      """@contextmanager decorator.
  
      Typical usage:
  
          @contextmanager
          def some_generator(<arguments>):
              <setup>
              try:
                  yield <value>
              finally:
                  <cleanup>
  
      This makes this:
  
          with some_generator(<arguments>) as <variable>:
              <body>
  
      equivalent to this:
  
          <setup>
          try:
              <variable> = <value>
              <body>
          finally:
              <cleanup>
      """
      @wraps(func)
      def helper(*args, **kwds):
          return _GeneratorContextManager(func, args, kwds)
      return helper
function_tokens: def contextmanager ( func ) : @ wraps ( func ) def helper ( * args , * * kwds ) : return _GeneratorContextManager ( func , args , kwds ) return helper