On Sun, 12 Aug 2012 00:14:27 -0700, Giacomo Alzetta wrote: > From The Number Protocol(http://docs.python.org/c-api/number.html). The > full text is: > > PyObject* PyNumber_InPlacePower(PyObject *o1, PyObject *o2, PyObject > *o3) > Return value: New reference. > > **See the built-in function pow().** Returns NULL on failure. The > operation is done in-place when o1 supports it. This is the > equivalent of the Python statement o1 **= o2 when o3 is Py_None, or > an in-place variant of pow(o1, o2, o3) otherwise. If o3 is to be > ignored, pass Py_None in its place (passing NULL for o3 would cause > an illegal memory access). > > The first thing that this text does is referring to the **function** > pow, which takes three arguments. And since the documentation of the > operator module states that "The operator module exports a set of > efficient functions corresponding to the intrinsic operators of > Python.", I'd expect the ipow to have three arguments, the third being > optional.
Why? There is no three-argument operator. There is a three-argument function, pow, but you don't need the operator module for that, it is built-in. There is no in-place three-argument operator, and no in-place three-argument function in the operator module. Arguing from "consistency" is not going to get you very far, since it is already consistent: In-place binary operator: **= In-place binary function: operator.ipow In-place three-argument operator: none In-place three-argument function: none If you decide to make a feature-request, you need to argue from usefulness, not consistency. http://bugs.python.org Remember that the Python 2.x branch is now in feature-freeze, so new features only apply to Python 3.x. > With normal exponentiation you have ** referring to the 2-argument > variant, and "pow" providing the ability to use the third argument. Correct. > At the moment in-place exponentiation you have "**=" referring to the > 2-argument variant(and this is consistent), while operator.ipow also > referring to it. Correct. Both **= and ipow match the ** operator, which only takes two arguments. > So providing an ipow with the third argument would just > increase consistency in the language, Consistency with something other than **= would be inconsistency. > and provide a feature that at the > moment is not present. (well if the designers of python care really much > about consistency they'd probably add an "ipow" built-in function, so > that you don't have to import it from "operator"). Not everything needs to be a built-in function. -- Steven -- http://mail.python.org/mailman/listinfo/python-list