parameters: (f, val, grouping=False)
return_statement: return new_f % val
docstring: Formats a string in the same way that the % formatting would use,
      but takes the current locale into account.
      Grouping is applied if the third parameter is true.
docstring_summary: Formats a string in the same way that the % formatting would use,
      but takes the current locale into account.
      Grouping is applied if the third parameter is true.
docstring_tokens: Formats a string in the same way that the % formatting would use but takes the current locale into account . Grouping is applied if the third parameter is true .
function: def format_string(f, val, grouping=False):
      """Formats a string in the same way that the % formatting would use,
      but takes the current locale into account.
      Grouping is applied if the third parameter is true."""
      percents = list(_percent_re.finditer(f))
      new_f = _percent_re.sub('%s', f)
  
      if operator.isMappingType(val):
          new_val = []
          for perc in percents:
              if perc.group()[-1]=='%':
                  new_val.append('%')
              else:
                  new_val.append(format(perc.group(), val, grouping))
      else:
          if not isinstance(val, tuple):
              val = (val,)
          new_val = []
          i = 0
          for perc in percents:
              if perc.group()[-1]=='%':
                  new_val.append('%')
              else:
                  starcount = perc.group('modifiers').count('*')
                  new_val.append(_format(perc.group(),
                                        val[i],
                                        grouping,
                                        False,
                                        *val[i+1:i+1+starcount]))
                  i += (1 + starcount)
      val = tuple(new_val)
  
      return new_f % val
function_tokens: def format_string ( f , val , grouping = False ) : percents = list ( _percent_re . finditer ( f ) ) new_f = _percent_re . sub ( '%s' , f ) if operator . isMappingType ( val ) : new_val = [ ] for perc in percents : if perc . group ( ) [ - 1 ] == '%' : new_val . append ( '%' ) else : new_val . append ( format ( perc . group ( ) , val , grouping ) ) else : if not isinstance ( val , tuple ) : val = ( val , ) new_val = [ ] i = 0 for perc in percents : if perc . group ( ) [ - 1 ] == '%' : new_val . append ( '%' ) else : starcount = perc . group ( 'modifiers' ) . count ( '*' ) new_val . append ( _format ( perc . group ( ) , val [ i ] , grouping , False , * val [ i + 1 : i + 1 + starcount ] ) ) i += ( 1 + starcount ) val = tuple ( new_val ) return new_f % val