Andreas Eisele schreef op 30/03/2023 om 11:15:
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?
According to the docs, "Unlike the built-in ** operator, math.pow()
converts both its arguments to type float. Use ** or the built-in pow()
function for computing exact integer powers." I think that means that
math.pow() is more meant to work with floats, while the built-in is more
meant for integers (even though the built-in works with floats just fine).
In any case, I would strongly advocate against "from math import *" (not
just for math but for any module really). One of the reasons is the
potential for name conflicts, which is exactly what you experience here.
Either import the things you need explicitly: "from math import sin,
cos, exp" (for example).
Or a plain import: "import math" combined with "math.sin", "math.cos".
Or use an abbreviation: "import math as m" combined with "m.sin", "m.cos".
--
"There is no cause so noble that it will not attract fuggheads."
-- Larry Niven
--
https://mail.python.org/mailman/listinfo/python-list