Wel*_*oni 5 python functional-programming keyword-argument functools
当我尝试对python中的问题应用更具功能性的方法时,就会出现此问题。我试图做的只是简单地将一个数字列表平方,没什么大不了的。
from operator import pow
from functools import partial
squared = list(map(partial(pow, b=2), range(10))
Run Code Online (Sandbox Code Playgroud)
事实证明,这没有用。 TypeError: pow() takes no keyword arguments
困惑我检查是否pow(b=2, a=3)。没有。
我已经检查了操作员的源代码,没有可疑之处。
感到困惑,我开始怀疑自己的python知识,我自己做了一个pow函数。
def pow(a, b):
return a ** b
Run Code Online (Sandbox Code Playgroud)
然后,我尝试用我的功能做同样的事情,而且令人惊讶的是,一切正常。
我不会猜测问题的原因是什么,我要问的仅仅是原因为何,以及是否存在解决方法。
如果您检查内置签名pow()或operator.pow()使用help()交互式外壳程序中的函数,您会看到它们需要仅位置参数(请注意尾部斜杠):
pow(x, y, z=None, /)
pow(a, b, /)
Run Code Online (Sandbox Code Playgroud)
原因是这两个函数都是用C实现的,并且它们的参数没有名称。您必须按位置提供参数。解决方法是,您可以创建一个纯Python pow()函数:
def pow(a, b):
return a ** b
Run Code Online (Sandbox Code Playgroud)
另请参见函数参数列表中的斜杠(/)是什么意思?在常见问题解答中。