This problem originated when I tried to apply a more functional approach to problems in python.
What I tried to do is simply square a list of numbers, no biggie.
from operator import pow
from functools import partial
squared = list(map(partial(pow, b=2), range(10))
As it turns out, this didn't work. TypeError: pow() takes no keyword arguments
Confused I checked if pow(b=2, a=3) did. It didn't.
I've checked the operator source code, nothing suspicious.
Confused, I've begun to doubt my own python knowledge, I made a pow function myself.
def pow(a, b):
return a ** b
Then I tried doing the same thing with my function and surprisingly, everything worked.
I'm not going to guess what is the cause of the problem, what I'm asking is simply why is this a thing and if there exists a workaround.
解决方案
If you check the signature of the built-in pow() or operator.pow() using the help() function in the interactive shell, you'll see that they require positional-only parameters (note the trailing slashes):
pow(x, y, z=None, /)
pow(a, b, /)
The reason is that both functions are implemented in C and don't have names for their arguments. You have to provide the arguments positionally. As a workaround, you can create a pure Python pow() function:
def pow(a, b):
return a ** b