Terry J. Reedy added the comment: I find the idea of intentionally not documenting a public parameter and the full signature of a function somewhat strange, especially when it is already automatically partially-documented.
import locale help(locale.atof) Help on function atof in module locale:
atof(string, func=<class 'float'>) Parses a string as a float according to the locale settings. # 2.7, 3.2, 3.3 Not documenting the full signature of a function seems to me contrary to proper policy. That aside, the func parameter is, to me, a useful feature, not just an implementation detail The way to have factored out the common normalization without a func parameter is obvious: define a private normalization function. def _anormalize(string): "remove thousands separators, make decimal dot" ts = localeconv()['thousands_sep'] if ts: string = string.replace(ts, '') #next, replace the decimal point with a dot dd = localeconv()['decimal_point'] if dd: string = string.replace(dd, '.') return string def atof(string): "Parses a string as a float according to the locale settings." return float(_anormalize(string)) def atoi(string): # changed from str "Converts a string to an integer according to the locale settings." return int(_anormalize(string)) But Martin von Loewis, the original author did not do this. I would not assume that he "thought that copying 3 lines from atof into atoi was a bad idea." without asking him. Whatever his conscious intention, the func parameter *does* have the advantage of allowing alternate float string to number converters. We now have another one in the stdlib besides decimal.Decimal: fractions.Fractions.
locale.atof('99,999.99', F) Fraction(9999999, 100) # versus F(locale.atof('99,999.99')) Fraction(6871946986405233, 68719476736)
There are also 3rd party float implementations, such as indefinite precision binary floats. Does anyone still object to properly documenting this useful feature? I am willing to do the commits. As to the patch and atof docstring, I thinks 'converts' (used in atoi docstring) is better than 'parses'. So I would change both. ---------- nosy: +terry.reedy versions: +Python 2.7, Python 3.2, Python 3.3, Python 3.4 _______________________________________ Python tracker <report@bugs.python.org> <http://bugs.python.org/issue13918> _______________________________________