mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-34637: Make the *start* argument for *sum()* visible as a keyword argument. (GH-9208)
This commit is contained in:
parent
0fb9fadd3b
commit
9dfa0fe587
5 changed files with 16 additions and 8 deletions
|
@ -1488,6 +1488,9 @@ are always available. They are listed here in alphabetical order.
|
||||||
see :func:`math.fsum`\. To concatenate a series of iterables, consider using
|
see :func:`math.fsum`\. To concatenate a series of iterables, consider using
|
||||||
:func:`itertools.chain`.
|
:func:`itertools.chain`.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.8
|
||||||
|
The *start* parameter can be specified as a keyword argument.
|
||||||
|
|
||||||
.. function:: super([type[, object-or-type]])
|
.. function:: super([type[, object-or-type]])
|
||||||
|
|
||||||
Return a proxy object that delegates method calls to a parent or sibling
|
Return a proxy object that delegates method calls to a parent or sibling
|
||||||
|
|
|
@ -1297,6 +1297,9 @@ class BuiltinTest(unittest.TestCase):
|
||||||
self.assertEqual(sum(iter(Squares(10))), 285)
|
self.assertEqual(sum(iter(Squares(10))), 285)
|
||||||
self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
|
self.assertEqual(sum([[1], [2], [3]], []), [1, 2, 3])
|
||||||
|
|
||||||
|
self.assertEqual(sum(range(10), 1000), 1045)
|
||||||
|
self.assertEqual(sum(range(10), start=1000), 1045)
|
||||||
|
|
||||||
self.assertRaises(TypeError, sum)
|
self.assertRaises(TypeError, sum)
|
||||||
self.assertRaises(TypeError, sum, 42)
|
self.assertRaises(TypeError, sum, 42)
|
||||||
self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
|
self.assertRaises(TypeError, sum, ['a', 'b', 'c'])
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Make the *start* argument to *sum()* visible as a keyword argument.
|
|
@ -2272,8 +2272,8 @@ With an argument, equivalent to object.__dict__.");
|
||||||
sum as builtin_sum
|
sum as builtin_sum
|
||||||
|
|
||||||
iterable: object
|
iterable: object
|
||||||
start: object(c_default="NULL") = 0
|
|
||||||
/
|
/
|
||||||
|
start: object(c_default="NULL") = 0
|
||||||
|
|
||||||
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
|
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
|
||||||
|
|
||||||
|
@ -2284,7 +2284,7 @@ reject non-numeric types.
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
|
builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
|
||||||
/*[clinic end generated code: output=df758cec7d1d302f input=3b5b7a9d7611c73a]*/
|
/*[clinic end generated code: output=df758cec7d1d302f input=162b50765250d222]*/
|
||||||
{
|
{
|
||||||
PyObject *result = start;
|
PyObject *result = start;
|
||||||
PyObject *temp, *item, *iter;
|
PyObject *temp, *item, *iter;
|
||||||
|
|
13
Python/clinic/bltinmodule.c.h
generated
13
Python/clinic/bltinmodule.c.h
generated
|
@ -608,7 +608,7 @@ exit:
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(builtin_sum__doc__,
|
PyDoc_STRVAR(builtin_sum__doc__,
|
||||||
"sum($module, iterable, start=0, /)\n"
|
"sum($module, iterable, /, start=0)\n"
|
||||||
"--\n"
|
"--\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Return the sum of a \'start\' value (default: 0) plus an iterable of numbers\n"
|
"Return the sum of a \'start\' value (default: 0) plus an iterable of numbers\n"
|
||||||
|
@ -618,20 +618,21 @@ PyDoc_STRVAR(builtin_sum__doc__,
|
||||||
"reject non-numeric types.");
|
"reject non-numeric types.");
|
||||||
|
|
||||||
#define BUILTIN_SUM_METHODDEF \
|
#define BUILTIN_SUM_METHODDEF \
|
||||||
{"sum", (PyCFunction)builtin_sum, METH_FASTCALL, builtin_sum__doc__},
|
{"sum", (PyCFunction)builtin_sum, METH_FASTCALL|METH_KEYWORDS, builtin_sum__doc__},
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start);
|
builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start);
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
builtin_sum(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
builtin_sum(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||||
{
|
{
|
||||||
PyObject *return_value = NULL;
|
PyObject *return_value = NULL;
|
||||||
|
static const char * const _keywords[] = {"", "start", NULL};
|
||||||
|
static _PyArg_Parser _parser = {"O|O:sum", _keywords, 0};
|
||||||
PyObject *iterable;
|
PyObject *iterable;
|
||||||
PyObject *start = NULL;
|
PyObject *start = NULL;
|
||||||
|
|
||||||
if (!_PyArg_UnpackStack(args, nargs, "sum",
|
if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
|
||||||
1, 2,
|
|
||||||
&iterable, &start)) {
|
&iterable, &start)) {
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
@ -710,4 +711,4 @@ builtin_issubclass(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
||||||
exit:
|
exit:
|
||||||
return return_value;
|
return return_value;
|
||||||
}
|
}
|
||||||
/*[clinic end generated code: output=9f17c7a87d740374 input=a9049054013a1b77]*/
|
/*[clinic end generated code: output=eb6d08a32e7c83b6 input=a9049054013a1b77]*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue