Python 3.x 用partial和divmod除以五

Python 3.x 用partial和divmod除以五,python-3.x,Python 3.x,当尝试编写一个除以五的时,使用divmod In [2]: from functools import partial In [3]: divided_by_five = partial(divmod, divisor=5) In [4]: divided_by_five(10) ----------------------------------------------------------

当尝试编写一个
除以五的
时,使用
divmod

In [2]: from functools import partial    

In [3]: divided_by_five = partial(divmod, divisor=5)                               

In [4]: divided_by_five(10)              
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-808446a06fa5> in <module>
----> 1 divided_by_five(10)

TypeError: divmod() takes no keyword arguments
[2]中的
:从functools导入部分
[3]中:除以五=部分(divmod,除数=5)
[4]中:除以五(10)
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
---->1除以五(10)
TypeError:divmod()不接受关键字参数
我有点困惑,
divmod
出现在关键字列表中,尽管它很琐碎。更让人困惑的是,它没有被除数和除数的关键字参数,这可能会使它变得不那么琐碎(镜像到
pow(base,exp)


使用
divmod
和'partial'
divmod
可以得到一个
除以五的
divmod
不接受任何关键字参数,更不用说
除数
参数了,因此你会得到错误。
partial
除数=5
传递给
divmod
,但它不知道如何处理它。

一般来说,
partial
可以使用位置参数,但只有在需要设置第一个参数时,而且即使这样,它也很容易出错

在这种情况下,您需要设置第二个,因此
partial
不会有帮助,因为它会给出错误的结果:

from functools import partial

divided_by_five = partial(divmod, 5)

print(divided_by_five(10))  # prints (0, 5) which is not what OP meant
它正在计算
5//10,5%10
,而不是
10//5,10%5

如果您坚持使用
partial
,则需要实施新的“divmod”:

from functools import partial

def divmod2(a, b):
    return a // b, a % b

divided_by_five = partial(divmod2, b=5)

print(divided_by_five(10))
输出

(2, 0)
此时,您最好使用lambda包装内置的
divmod

divided_by_five = lambda a: divmod(a, 5)

print(divided_by_five(10))
# (2, 0)
尽管命名为lambda的产品不受欢迎,但使用
def
来实现这一点似乎有些过分