取分数的倒数
Taking the reciprocal of a Fraction
我想在 python 中取 Fraction
的倒数,并就地这样做。 Fraction
class 没有提供这样做的方法(据我所知)。我试着交换分子和分母:
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',即不必要的复杂。有没有更好的取倒数的方法?
我认为f**-1
这将完成工作
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))
Fractions
像许多(所有?)Python 数字一样是不可变的,这就是为什么您不能更改它们的属性。解决方法是定义一个函数,该函数根据传递给它的属性创建 returns new 个 class 实例。下面显示了执行此操作的两种方法。
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)
我想在 python 中取 Fraction
的倒数,并就地这样做。 Fraction
class 没有提供这样做的方法(据我所知)。我试着交换分子和分母:
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',即不必要的复杂。有没有更好的取倒数的方法?
我认为f**-1
这将完成工作
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))
Fractions
像许多(所有?)Python 数字一样是不可变的,这就是为什么您不能更改它们的属性。解决方法是定义一个函数,该函数根据传递给它的属性创建 returns new 个 class 实例。下面显示了执行此操作的两种方法。
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)