1

我想Fraction在 python 中取倒数,并就地这样做。该Fraction课程没有提供这样做的方法(据我所知)。我试图交换分子和分母:

f = Fraction(2, 3)
f.numerator, f.denominator = f.denominator, f.numerator

但它导致了一个AttributeError: can't set attribute.

我还使用了只构建一个新的方法Fraction

f = Fraction(2, 3)
f = Fraction(f.denominator, f.numerator)

这确实有效,但是创建一个新对象并删除旧对象似乎不是很“pythonic”,即不必要的复杂。有没有更好的方法来取反?

4

3 回答 3

3
from fractions import Fraction

spam = Fraction(2, 3)
eggs = spam ** -1
print(repr(eggs))

输出

Fraction(3, 2)

编辑:正如@martineau 1 / spam评论中所建议的那样也有效:

from fractions import Fraction

spam = Fraction(2, 3)
eggs = 1 / spam 
print(repr(eggs))
于 2021-01-16T17:43:40.143 回答
2

我认为f**-1这将完成这项工作

于 2021-01-16T17:42:29.463 回答
1

Fractions像许多(全部?)Python 数字一样是不可变的,这就是为什么您不能更改它们的属性。解决方法是定义一个函数,该函数根据传递给它的属性创建并返回类的实例。下面显示了两种方法。

from fractions import Fraction


def reciprocal(f):
    """ Return reciprocal of argument (an instance of Fraction). """
    return Fraction(f.denominator, f.numerator)

# Alternative implementation.
reciprocal = lambda f: Fraction(f.denominator, f.numerator)


f = Fraction(2, 3)
print(f)  # -> 2/3
print(repr(f))  # -> Fraction(2, 3)
r = reciprocal(f)
print(r)  # -> 3/2
print(repr(r))  # -> Fraction(3, 2)

于 2021-01-16T18:07:05.483 回答