Improve consistency with the signature for sorted(), heapq.nsmallest(), heapq.nlargest(), and itertools.groupby().
.. versionadded:: 3.4
The *default* keyword-only argument.
+ .. versionchanged:: 3.8
+ The *key* can be ``None``.
+
.. _func-memoryview:
.. function:: memoryview(obj)
.. versionadded:: 3.4
The *default* keyword-only argument.
+ .. versionchanged:: 3.8
+ The *key* can be ``None``.
+
.. function:: next(iterator[, default])
if n == 1:
it = iter(iterable)
sentinel = object()
- if key is None:
- result = min(it, default=sentinel)
- else:
- result = min(it, default=sentinel, key=key)
+ result = min(it, default=sentinel, key=key)
return [] if result is sentinel else [result]
# When n>=size, it's faster to use sorted()
if n == 1:
it = iter(iterable)
sentinel = object()
- if key is None:
- result = max(it, default=sentinel)
- else:
- result = max(it, default=sentinel, key=key)
+ result = max(it, default=sentinel, key=key)
return [] if result is sentinel else [result]
# When n>=size, it's faster to use sorted()
self.assertEqual(max((), default=1, key=neg), 1)
self.assertEqual(max((1, 2), default=3, key=neg), 1)
+ self.assertEqual(max((1, 2), key=None), 2)
+
data = [random.randrange(200) for i in range(100)]
keys = dict((elem, random.randrange(50)) for elem in data)
f = keys.__getitem__
self.assertEqual(min((), default=1, key=neg), 1)
self.assertEqual(min((1, 2), default=1, key=neg), 2)
+ self.assertEqual(min((1, 2), key=None), 1)
+
data = [random.randrange(200) for i in range(100)]
keys = dict((elem, random.randrange(50)) for elem in data)
f = keys.__getitem__
--- /dev/null
+Fix min and max functions to get default behavior when key is None.
return NULL;
}
+ if (keyfunc == Py_None) {
+ keyfunc = NULL;
+ }
+
maxitem = NULL; /* the result */
maxval = NULL; /* the value associated with the result */
while (( item = PyIter_Next(it) )) {