Revert None deafult for aiter/anext and add whatsnew entry
This commit is contained in:
parent
8b8a689128
commit
894600d8e2
|
@ -157,6 +157,11 @@ Other Language Changes
|
||||||
* Assignment expressions can now be used unparenthesized within set literals
|
* Assignment expressions can now be used unparenthesized within set literals
|
||||||
and set comprehensions, as well as in sequence indexes (but not slices).
|
and set comprehensions, as well as in sequence indexes (but not slices).
|
||||||
|
|
||||||
|
* Two new builtin functions -- :func:`aiter` and :func:`anext` have been added
|
||||||
|
to provide asynchronous counterparts to :func:`iter` and :func:`next`,
|
||||||
|
respectively.
|
||||||
|
(Contributed by Joshua Bronson, Justin Wang and Daniel Pope in :issue:`31861`)
|
||||||
|
|
||||||
|
|
||||||
New Modules
|
New Modules
|
||||||
===========
|
===========
|
||||||
|
|
|
@ -3814,6 +3814,9 @@ class TestSignatureDefinitions(unittest.TestCase):
|
||||||
needs_groups = {"range", "slice", "dir", "getattr",
|
needs_groups = {"range", "slice", "dir", "getattr",
|
||||||
"next", "iter", "vars"}
|
"next", "iter", "vars"}
|
||||||
no_signature |= needs_groups
|
no_signature |= needs_groups
|
||||||
|
# These have unpresentable parameter default values of NULL
|
||||||
|
needs_null = {"aiter", "anext"}
|
||||||
|
no_signature |= needs_null
|
||||||
# These need PEP 457 groups or a signature change to accept None
|
# These need PEP 457 groups or a signature change to accept None
|
||||||
needs_semantic_update = {"round"}
|
needs_semantic_update = {"round"}
|
||||||
no_signature |= needs_semantic_update
|
no_signature |= needs_semantic_update
|
||||||
|
|
|
@ -1539,7 +1539,7 @@ In the second form, the callable is called until it returns the sentinel.");
|
||||||
aiter as builtin_aiter
|
aiter as builtin_aiter
|
||||||
|
|
||||||
aiterable: object
|
aiterable: object
|
||||||
sentinel: object = None
|
sentinel: object = NULL
|
||||||
/
|
/
|
||||||
|
|
||||||
Return an async iterator for an async iterable object.
|
Return an async iterator for an async iterable object.
|
||||||
|
@ -1547,9 +1547,9 @@ Return an async iterator for an async iterable object.
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
builtin_aiter_impl(PyObject *module, PyObject *aiterable, PyObject *sentinel)
|
builtin_aiter_impl(PyObject *module, PyObject *aiterable, PyObject *sentinel)
|
||||||
/*[clinic end generated code: output=ea120e90169d9f32 input=586f672fb18a94a5]*/
|
/*[clinic end generated code: output=ea120e90169d9f32 input=a12efceda1863b3c]*/
|
||||||
{
|
{
|
||||||
if (sentinel == Py_None) {
|
if (sentinel == NULL) {
|
||||||
return PyObject_GetAiter(aiterable);
|
return PyObject_GetAiter(aiterable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1566,7 +1566,7 @@ builtin_aiter_impl(PyObject *module, PyObject *aiterable, PyObject *sentinel)
|
||||||
anext as builtin_anext
|
anext as builtin_anext
|
||||||
|
|
||||||
aiterator: object
|
aiterator: object
|
||||||
default: object = None
|
default: object = NULL
|
||||||
/
|
/
|
||||||
|
|
||||||
Return the next item from the async iterator.
|
Return the next item from the async iterator.
|
||||||
|
@ -1575,7 +1575,7 @@ Return the next item from the async iterator.
|
||||||
static PyObject *
|
static PyObject *
|
||||||
builtin_anext_impl(PyObject *module, PyObject *aiterator,
|
builtin_anext_impl(PyObject *module, PyObject *aiterator,
|
||||||
PyObject *default_value)
|
PyObject *default_value)
|
||||||
/*[clinic end generated code: output=f02c060c163a81fa input=6051f80000c06306]*/
|
/*[clinic end generated code: output=f02c060c163a81fa input=699d11f4e38eca24]*/
|
||||||
{
|
{
|
||||||
PyTypeObject *t;
|
PyTypeObject *t;
|
||||||
PyObject *awaitable;
|
PyObject *awaitable;
|
||||||
|
@ -1589,7 +1589,7 @@ builtin_anext_impl(PyObject *module, PyObject *aiterator,
|
||||||
}
|
}
|
||||||
|
|
||||||
awaitable = (*t->tp_as_async->am_anext)(aiterator);
|
awaitable = (*t->tp_as_async->am_anext)(aiterator);
|
||||||
if (default_value == Py_None) {
|
if (default_value == NULL) {
|
||||||
return awaitable;
|
return awaitable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -531,7 +531,7 @@ PyDoc_STRVAR(builtin_hex__doc__,
|
||||||
{"hex", (PyCFunction)builtin_hex, METH_O, builtin_hex__doc__},
|
{"hex", (PyCFunction)builtin_hex, METH_O, builtin_hex__doc__},
|
||||||
|
|
||||||
PyDoc_STRVAR(builtin_aiter__doc__,
|
PyDoc_STRVAR(builtin_aiter__doc__,
|
||||||
"aiter($module, aiterable, sentinel=None, /)\n"
|
"aiter($module, aiterable, sentinel=<unrepresentable>, /)\n"
|
||||||
"--\n"
|
"--\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Return an async iterator for an async iterable object.");
|
"Return an async iterator for an async iterable object.");
|
||||||
|
@ -547,7 +547,7 @@ builtin_aiter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
||||||
{
|
{
|
||||||
PyObject *return_value = NULL;
|
PyObject *return_value = NULL;
|
||||||
PyObject *aiterable;
|
PyObject *aiterable;
|
||||||
PyObject *sentinel = Py_None;
|
PyObject *sentinel = NULL;
|
||||||
|
|
||||||
if (!_PyArg_CheckPositional("aiter", nargs, 1, 2)) {
|
if (!_PyArg_CheckPositional("aiter", nargs, 1, 2)) {
|
||||||
goto exit;
|
goto exit;
|
||||||
|
@ -565,7 +565,7 @@ exit:
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(builtin_anext__doc__,
|
PyDoc_STRVAR(builtin_anext__doc__,
|
||||||
"anext($module, aiterator, default=None, /)\n"
|
"anext($module, aiterator, default=<unrepresentable>, /)\n"
|
||||||
"--\n"
|
"--\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Return the next item from the async iterator.");
|
"Return the next item from the async iterator.");
|
||||||
|
@ -582,7 +582,7 @@ builtin_anext(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
||||||
{
|
{
|
||||||
PyObject *return_value = NULL;
|
PyObject *return_value = NULL;
|
||||||
PyObject *aiterator;
|
PyObject *aiterator;
|
||||||
PyObject *default_value = Py_None;
|
PyObject *default_value = NULL;
|
||||||
|
|
||||||
if (!_PyArg_CheckPositional("anext", nargs, 1, 2)) {
|
if (!_PyArg_CheckPositional("anext", nargs, 1, 2)) {
|
||||||
goto exit;
|
goto exit;
|
||||||
|
@ -899,4 +899,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=02b80d529a5c972b input=a9049054013a1b77]*/
|
/*[clinic end generated code: output=b5248d88ee495198 input=a9049054013a1b77]*/
|
||||||
|
|
Loading…
Reference in New Issue