如何解决不支持索引的 Python 对象?
How to work around Python object that does not support indexing?
Objective: 有两个元素可以稍后在脚本中调用
说明:在下面的例子中,我只对 0.25 值感兴趣,它会用 1/4) 表示。我想要 numerator (1) and the denominator (4). I am making use of Python's fractions 模块的值。
NUMBER = 5.25
from fractions import Fraction
import math
def express_partFraction(NUMBER):
part = math.modf(NUMBER)[0]
return ((Fraction(part)))
express_partFraction(NUMBER)
目前,我返回了以下不可索引的内容:
Fraction(1, 4)
不过,我正在寻找类似以下内容的内容:
numerator = express_partFraction(NUMBER)[0]
denominator = express_partFraction(NUMBER)[1]
产生此错误的原因:
TypeError Traceback (most recent call last)
<ipython-input-486-39196ec5b50b> in <module>()
10 express_partFraction(NUMBER)
11
---> 12 numerator = express_partFraction(NUMBER)[0]
13 denominator = express_partFraction(NUMBER)[1]
TypeError: 'Fraction' object does not support indexing
Python 2.7 文档忽略了 Fraction
对象具有 numerator
和 denominator
属性的事实。您可以在 the Python 3 documentation.
中找到它们
如果要查看未知对象有哪些属性,只需使用dir()
函数:
>>> x = Fraction(1, 2)
>>> x.numerator
1
>>> x.denominator
2
>>> [a for a in dir(x) if not a.startswith('_')]
['conjugate', 'denominator', 'from_decimal', 'from_float', 'imag', 'limit_denominator', 'numerator', 'real']
分数对象具有 numerator
和 denominator
属性:
numerator = some_fraction.numerator
denominator = some_fraction.denominator
不过,您输入的是浮点数这一事实会给您带来问题:
>>> fractions.Fraction(0.1)
Fraction(3602879701896397, 36028797018963968)
有 limit_denominator
,假设分母不是太大,你可以用它来猜测分数 "should" 是多少,但你真的应该尽量避免 floating-point 完全一步。例如,将输入作为字符串:
>>> fractions.Fraction('1.1')
Fraction(11, 10)
>>> fractions.Fraction('1.1') % 1
Fraction(1, 10)
>>> _.numerator
1
Objective: 有两个元素可以稍后在脚本中调用
说明:在下面的例子中,我只对 0.25 值感兴趣,它会用 1/4) 表示。我想要 numerator (1) and the denominator (4). I am making use of Python's fractions 模块的值。
NUMBER = 5.25
from fractions import Fraction
import math
def express_partFraction(NUMBER):
part = math.modf(NUMBER)[0]
return ((Fraction(part)))
express_partFraction(NUMBER)
目前,我返回了以下不可索引的内容:
Fraction(1, 4)
不过,我正在寻找类似以下内容的内容:
numerator = express_partFraction(NUMBER)[0]
denominator = express_partFraction(NUMBER)[1]
产生此错误的原因:
TypeError Traceback (most recent call last)
<ipython-input-486-39196ec5b50b> in <module>()
10 express_partFraction(NUMBER)
11
---> 12 numerator = express_partFraction(NUMBER)[0]
13 denominator = express_partFraction(NUMBER)[1]
TypeError: 'Fraction' object does not support indexing
Python 2.7 文档忽略了 Fraction
对象具有 numerator
和 denominator
属性的事实。您可以在 the Python 3 documentation.
如果要查看未知对象有哪些属性,只需使用dir()
函数:
>>> x = Fraction(1, 2)
>>> x.numerator
1
>>> x.denominator
2
>>> [a for a in dir(x) if not a.startswith('_')]
['conjugate', 'denominator', 'from_decimal', 'from_float', 'imag', 'limit_denominator', 'numerator', 'real']
分数对象具有 numerator
和 denominator
属性:
numerator = some_fraction.numerator
denominator = some_fraction.denominator
不过,您输入的是浮点数这一事实会给您带来问题:
>>> fractions.Fraction(0.1)
Fraction(3602879701896397, 36028797018963968)
有 limit_denominator
,假设分母不是太大,你可以用它来猜测分数 "should" 是多少,但你真的应该尽量避免 floating-point 完全一步。例如,将输入作为字符串:
>>> fractions.Fraction('1.1')
Fraction(11, 10)
>>> fractions.Fraction('1.1') % 1
Fraction(1, 10)
>>> _.numerator
1