From ccadf84a1bc1b7908f5dcefd6897f93e174c57b9 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Fri, 31 Mar 2006 18:54:53 +0000 Subject: Patch #1460496: round() now accepts keyword arguments. --- Lib/test/test_builtin.py | 3 +++ Misc/NEWS | 2 ++ Python/bltinmodule.c | 28 +++++++++++++++------------- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index a05babf..fa36095 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -1395,6 +1395,9 @@ class BuiltinTest(unittest.TestCase): self.assertEqual(round(-8.0, -1), -10.0) + # test new kwargs + self.assertEqual(round(number=-8.0, ndigits=-1), -10.0) + self.assertRaises(TypeError, round) def test_setattr(self): diff --git a/Misc/NEWS b/Misc/NEWS index 4d0e0bd..ea5095f 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,8 @@ What's New in Python 2.5 alpha 1? Core and builtins ----------------- +- Patch #1460496: round() now accepts keyword arguments. + - Fixed bug #1459029 - unicode reprs were double-escaped. - Patch #1396919: The system scope threads are reenabled on FreeBSD diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index c9da78c..b675c26 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -1870,32 +1870,34 @@ For most object types, eval(repr(object)) == object."); static PyObject * -builtin_round(PyObject *self, PyObject *args) +builtin_round(PyObject *self, PyObject *args, PyObject *kwds) { - double x; + double number; double f; int ndigits = 0; int i; + static char *kwlist[] = {"number", "ndigits", 0}; - if (!PyArg_ParseTuple(args, "d|i:round", &x, &ndigits)) - return NULL; + if (!PyArg_ParseTupleAndKeywords(args, kwds, "d|i:round", + kwlist, &number, &ndigits)) + return NULL; f = 1.0; i = abs(ndigits); while (--i >= 0) f = f*10.0; if (ndigits < 0) - x /= f; + number /= f; else - x *= f; - if (x >= 0.0) - x = floor(x + 0.5); + number *= f; + if (number >= 0.0) + number = floor(number + 0.5); else - x = ceil(x - 0.5); + number = ceil(number - 0.5); if (ndigits < 0) - x *= f; + number *= f; else - x /= f; - return PyFloat_FromDouble(x); + number /= f; + return PyFloat_FromDouble(number); } PyDoc_STRVAR(round_doc, @@ -2248,7 +2250,7 @@ static PyMethodDef builtin_methods[] = { {"reduce", builtin_reduce, METH_VARARGS, reduce_doc}, {"reload", builtin_reload, METH_O, reload_doc}, {"repr", builtin_repr, METH_O, repr_doc}, - {"round", builtin_round, METH_VARARGS, round_doc}, + {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc}, {"setattr", builtin_setattr, METH_VARARGS, setattr_doc}, {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS | METH_KEYWORDS, sorted_doc}, {"sum", builtin_sum, METH_VARARGS, sum_doc}, -- cgit v0.12