python-3.x - 用 partial 和 divmod 分割的_by_5
问题描述
当尝试写一个divided_by_five
withdivmod
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
我有点困惑,divmod
即使它微不足道,也会出现在关键字列表中。更令人困惑的是,它没有除数和除数的关键字参数,这可能导致它几乎不那么微不足道(镜像到pow(base, exp)
.
是否有可能获得一个divided_by_five
和divmod
“部分”
解决方案
divmod
不接受任何关键字参数,更不用说divisor
参数了,因此你得到的错误。partial
传递divisor=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)
此时你不妨divmod
用 lambda 包装内置:
divided_by_five = lambda a: divmod(a, 5)
print(divided_by_five(10))
# (2, 0)
尽管命名的 lambdas 不受欢迎,但使用它似乎有点过头了def
。
推荐阅读
- aws-lambda - 无服务器 nuxt 应用程序中的路由不起作用
- python - 将数据从 API 写入 CSV
- python-3.x - 如何更改python子列表中元素的大小写?
- python - RuntimeWarning:exp 中遇到溢出(记录到相对)
- java - 重复提醒通知Android(java)问题
- java - Groovy + Spock 测试“Validator”类型的 void 方法,在不满足条件时抛出错误
- java - arraylist 如何在子集算法中操作和重用
- vue.js - 状态在多个应用程序之间共享。- vuex 持久化状态
- python - 使用 hvplot 从 xarray 数据集中绘制两个数据变量
- android - 过滤器正在折叠列表视图