Some questions are more reasonable than others. If the version of a function used in a package were IDENTICAL to the built-in, then why have it?
There are many possible reasons a package may tune a function for their own preferences or re-use a name that ends up blocking the view of another name. The bottom line is if you do not want the other one, then don't ask for it by not importing the entire module into your namespace or by explicitly asking for the base function in the ways python provides. Others have replied about differences in various implementations of pow() and reiterated my point above that if you want a specific function instance, it is your responsibility to make sure you get it. One method I would mention that I have not seen is to copy pow() to your own name before importing other things. Something like: pow3 = pow import ... Then use the new name. Or import all of math (despite advice not to) and then make pow3 a synonym for the base version. Most people most of the time will want a small and fast function that does what they asked for and does not waste time looking for an optional third argument and doing something additional. Would you be satisfied if math::pow() simply checked for a third argument and turned around and called base::pow() to handle it? A deeper question I can appreciate is wondering if it is a bug or feature that python (and many other languages) allow results where you can hide a variable or function name. I call it a feature. As with all such variables, scope rules and other such things apply and make the language powerful and sometimes a tad dangerous. -----Original Message----- From: Python-list <python-list-bounces+avi.e.gross=gmail....@python.org> On Behalf Of Andreas Eisele Sent: Thursday, March 30, 2023 5:16 AM To: python-list@python.org Subject: built-in pow() vs. math.pow() I sometimes make use of the fact that the built-in pow() function has an optional third argument for modulo calculation, which is handy when dealing with tasks from number theory, very large numbers, problems from Project Euler, etc. I was unpleasantly surprised that math.pow() does not have this feature, hence "from math import *" overwrites the built-in pow() function with a function that lacks functionality. I am wondering for the rationale of this. Does math.pow() do anything that the built-in version can not do, and if not, why is it even there? Thanks in advance for any enlightening comment on this. Best regards, Andreas -- https://mail.python.org/mailman/listinfo/python-list -- https://mail.python.org/mailman/listinfo/python-list