Kaydet (Commit) 5959c559 authored tarafından Raymond Hettinger's avatar Raymond Hettinger

Added __pow__(a,b) to the operator module. Completes the pattern of

all operators having a counterpart in the operator module.

Closes SF bug #577513.
üst 7dca21e5
......@@ -131,6 +131,11 @@ Return the bitwise or of \var{a} and \var{b}.
Return \var{o} positive.
\end{funcdesc}
\begin{funcdesc}{pow}{a, b}
\funcline{__pow__}{a, b}
Return \var{a} \code{**} \var{b}, for \var{a} and \var{b} numbers.
\end{funcdesc}
\begin{funcdesc}{rshift}{a, b}
\funcline{__rshift__}{a, b}
Return \var{a} shifted right by \var{b}.
......@@ -310,6 +315,8 @@ symbols in the Python syntax and the functions in the
{\code{invert(\var{a})}}
\lineiii{Bitwise Or}{\code{\var{a} | \var{b}}}
{\code{or_(\var{a}, \var{b})}}
\lineiii{Exponentiation}{\code{\var{a} ** \var{b}}}
{\code{pow(\var{a}, \var{b})}}
\lineiii{Indexed Assignment}{\code{\var{o}[\var{k}] = \var{v}}}
{\code{setitem(\var{o}, \var{k}, \var{v})}}
\lineiii{Indexed Deletion}{\code{del \var{o}[\var{k}]}}
......
......@@ -161,6 +161,12 @@ class OperatorTestCase(unittest.TestCase):
self.failUnless(operator.pos(0) == 0)
self.failUnless(operator.pos(-0) == 0)
def test_pow(self):
self.failUnless(operator.pow(3,5) == 3**5)
self.failUnless(operator.__pow__(3,5) == 3**5)
self.assertRaises(TypeError, operator.pow, 1)
self.assertRaises(TypeError, operator.pow, 1, 2, 3)
def test_repeat(self):
a = range(3)
self.failUnless(operator.repeat(a, 2) == a+a)
......
......@@ -101,6 +101,15 @@ spamrc(op_ne , Py_NE)
spamrc(op_gt , Py_GT)
spamrc(op_ge , Py_GE)
static PyObject*
op_pow(PyObject *s, PyObject *a)
{
PyObject *a1, *a2;
if (PyArg_ParseTuple(a,"OO:pow",&a1,&a2))
return PyNumber_Power(a1, a2, Py_None);
return NULL;
}
static PyObject*
op_getslice(PyObject *s, PyObject *a)
{
......@@ -199,6 +208,7 @@ spam2(setitem,__setitem__,
"setitem(a, b, c) -- Same as a[b] = c.")
spam2(delitem,__delitem__,
"delitem(a, b) -- Same as del a[b].")
spam2(pow,__pow__, "pow(a, b) -- Same as a**b.")
spam2(getslice,__getslice__,
"getslice(a, b, c) -- Same as a[b:c].")
spam2(setslice,__setslice__,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment