code: def yieldroutes(func):
      
      import inspect # Expensive module. Only import if necessary.
      path = '/' + func.__name__.replace('__','/').lstrip('/')
      spec = inspect.getargspec(func)
      argc = len(spec[0]) - len(spec[3] or [])
      path += ('/:%s' * argc) % tuple(spec[0][:argc])
      yield path
      for arg in spec[0][argc:]:
          path += '/:%s' % arg
          yield path
docs: Return a generator for routes that match the signature (name, args)
      of the func parameter. This may yield more than one route if the function
      takes optional keyword arguments. The output is best described by example::
  
          a()         -> '/a'
          b(x, y)     -> '/b/:x/:y'
          c(x, y=5)   -> '/c/:x' and '/c/:x/:y'
          d(x=5, y=6) -> '/d' and '/d/:x' and '/d/:x/:y'