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}. ...@@ -131,6 +131,11 @@ Return the bitwise or of \var{a} and \var{b}.
Return \var{o} positive. Return \var{o} positive.
\end{funcdesc} \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} \begin{funcdesc}{rshift}{a, b}
\funcline{__rshift__}{a, b} \funcline{__rshift__}{a, b}
Return \var{a} shifted right by \var{b}. Return \var{a} shifted right by \var{b}.
...@@ -310,6 +315,8 @@ symbols in the Python syntax and the functions in the ...@@ -310,6 +315,8 @@ symbols in the Python syntax and the functions in the
{\code{invert(\var{a})}} {\code{invert(\var{a})}}
\lineiii{Bitwise Or}{\code{\var{a} | \var{b}}} \lineiii{Bitwise Or}{\code{\var{a} | \var{b}}}
{\code{or_(\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}}} \lineiii{Indexed Assignment}{\code{\var{o}[\var{k}] = \var{v}}}
{\code{setitem(\var{o}, \var{k}, \var{v})}} {\code{setitem(\var{o}, \var{k}, \var{v})}}
\lineiii{Indexed Deletion}{\code{del \var{o}[\var{k}]}} \lineiii{Indexed Deletion}{\code{del \var{o}[\var{k}]}}
......
...@@ -161,6 +161,12 @@ class OperatorTestCase(unittest.TestCase): ...@@ -161,6 +161,12 @@ class OperatorTestCase(unittest.TestCase):
self.failUnless(operator.pos(0) == 0) self.failUnless(operator.pos(0) == 0)
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): def test_repeat(self):
a = range(3) a = range(3)
self.failUnless(operator.repeat(a, 2) == a+a) self.failUnless(operator.repeat(a, 2) == a+a)
......
...@@ -101,6 +101,15 @@ spamrc(op_ne , Py_NE) ...@@ -101,6 +101,15 @@ spamrc(op_ne , Py_NE)
spamrc(op_gt , Py_GT) spamrc(op_gt , Py_GT)
spamrc(op_ge , Py_GE) 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* static PyObject*
op_getslice(PyObject *s, PyObject *a) op_getslice(PyObject *s, PyObject *a)
{ {
...@@ -199,6 +208,7 @@ spam2(setitem,__setitem__, ...@@ -199,6 +208,7 @@ spam2(setitem,__setitem__,
"setitem(a, b, c) -- Same as a[b] = c.") "setitem(a, b, c) -- Same as a[b] = c.")
spam2(delitem,__delitem__, spam2(delitem,__delitem__,
"delitem(a, b) -- Same as del a[b].") "delitem(a, b) -- Same as del a[b].")
spam2(pow,__pow__, "pow(a, b) -- Same as a**b.")
spam2(getslice,__getslice__, spam2(getslice,__getslice__,
"getslice(a, b, c) -- Same as a[b:c].") "getslice(a, b, c) -- Same as a[b:c].")
spam2(setslice,__setslice__, 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