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
来实现这一点似乎有些过分