![](/img/trans.png)
[英]What's the neatest way to get a value from a dictionary and convert to an integer if it exists – in python 3.8?
[英]What's the purpose of the new method int.as_integer_ratio() in Python 3.8
我正在查看在 python 3.8 中实现的新功能,我发现了一个新的 function numerator, denominator = x.as_integer_ratio()
。 他们 state 在它的文档中
返回一对整数,其比率完全等于原始 integer 并且分母为正。 整数(整数)的 integer 比率始终以 integer 作为分子,1 作为分母。
基本上这段代码
x = 10
numerator, denominator = x.as_integer_ratio()
print(numerator)
print(denominator)
Output
10
1
我只是想知道拥有一个总是返回相同值和 1 的 function 有什么意义? 我还看到它以前可用于float
,这是有道理的。
从文档
这个次要的 API 扩展使得编写分子、分母 = x.as_integer_ratio() 并使其适用于多种数字类型成为可能。
此方法已在多种类型上可用,例如float
。 现在使用此方法的代码适用于更多类型。 在鸭子打字下归档。
更改的主要原因似乎是为了实现统一性,并为 mypy 键入,因此int
可以是float
的子类型
msg313780 - (查看) 作者:Raymond Hettinger (rhettinger) * (Python committer) 日期:2018-03-13 21:25
目标:通过使浮点/十进制方法也可用于整数,使 int() 与浮点的互操作性更强。 这将使 mypy 将整数视为浮点数的子类型。
请参阅: https://mail.python.org/pipermail/python-dev/2018-March/152384.html
开放式问题:fractions.Fraction 和 numbers.Rational 也需要这样吗?
并深入研究 pipermail,它似乎有助于通过分解等方式更改类型的域:
[Python-Dev] 对称 arguments 用于 API 扩展 Guido van Rossum guido 在 python.org Tue Mar 13 15:07:15 EDT 20
Previous message (by thread): [Python-Dev] Symmetry arguments for API expansion Next message (by thread): [Python-Dev] Symmetry arguments for API expansion Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
好的,请这样。
2018 年 3 月 13 日星期二上午 11:39,Raymond Hettinger < raymond.hettinger at gmail.com> 写道:
2018 年 3 月 13 日上午 10:43,Guido van Rossum 写道:
因此,让我们将 as_integer_ratio() 设为“如何从不实现 numbers.Rational 的数字中生成分数”的标准协议。 我们已经有两个例子(浮点数和十进制),也许 numpy 或有时提出的固定宽度十进制类型也可以从中受益。 如果这意味着我们应该将它添加到 int 中,那对我来说很好。
我想要这样的结果。
签名 x.as_integer_ratio() -> (int, int) 使用起来很愉快。 output 很容易解释,并且分母与 2 或 10 的幂无关。 由于 Python 整数是精确且无界的,因此无需担心范围或舍入问题。
相比之下, math.freexp(float) ->(float, int) 有点痛苦,因为它仍然让你处于浮点域中,而不是让你分解为更基本的类型。 很高兴有一种方法可以将链从ℚ、ℝ或ℂ向下移动到更基本的ℤ(当然,这只是因为浮点数和复数以排除精确无理数的方式实现)。
雷蒙德
看:
考虑一个 function,它接受一个参数并将其作为分数进行操作:
def foo(x):
# ...
num, denom = x.as_integer_ratio()
# ...
在 3.8 之前,我们只能用浮点数调用它:
foo(3.14)
但现在我们可以用 int 调用它并获得可靠的行为:
foo(42)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.