org.python.modules._functools._functools Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jython-slim Show documentation
Show all versions of jython-slim Show documentation
Jython is an implementation of the high-level, dynamic, object-oriented
language Python written in 100% Pure Java, and seamlessly integrated with
the Java platform. It thus allows you to run Python on any Java platform.
/* Copyright (c) Jython Developers */
package org.python.modules._functools;
import org.python.core.ClassDictInit;
import org.python.core.Py;
import org.python.core.PyObject;
import org.python.core.PyString;
/**
* The Python _functools module.
*/
public class _functools implements ClassDictInit {
public static final PyString __doc__ = new PyString("Tools that operate on functions.");
public static void classDictInit(PyObject dict) {
dict.__setitem__("__name__", new PyString("_functools"));
dict.__setitem__("__doc__", __doc__);
dict.__setitem__("partial", PyPartial.TYPE);
// Hide from Python
dict.__setitem__("classDictInit", null);
}
public static PyString __doc__reduce = new PyString(
"reduce(function, sequence[, initial]) -> value\n\n" +
"Apply a function of two arguments cumulatively to the items of a sequence,\n" +
"from left to right, so as to reduce the sequence to a single value.\n" +
"For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n" +
"((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n" +
"of the sequence in the calculation, and serves as a default when the\n" +
"sequence is empty.");
public static PyObject reduce(PyObject f, PyObject l, PyObject z) {
PyObject result = z;
PyObject iter = Py.iter(l, "reduce() arg 2 must support iteration");
for (PyObject item; (item = iter.__iternext__()) != null;) {
if (result == null) {
result = item;
} else {
result = f.__call__(result, item);
}
}
if (result == null) {
throw Py.TypeError("reduce of empty sequence with no initial value");
}
return result;
}
public static PyObject reduce(PyObject f, PyObject l) {
return reduce(f, l, null);
}
}