Message393559
Note for posterity: I tried out pattern matching here but it was a little tricky and it slowed down the code a bit. At at least it worked.
if denominator is None:
match numerator:
case int(x) if type(numerator) is int:
self._numerator = numerator
self._denominator = 1
return self
case numbers.Rational(numerator=numerator, denominator=denominator):
self._numerator = numerator
self._denominator = denominator
return self
case object(as_integer_ratio=_):
self._numerator, self._denominator = numerator.as_integer_ratio()
return self
case str(x):
m = _RATIONAL_FORMAT.match(numerator)
if m is None:
raise ValueError('Invalid literal for Fraction: %r' %
numerator)
numerator = int(m.group('num') or '0')
denom = m.group('denom')
if denom:
denominator = int(denom)
else:
denominator = 1
decimal = m.group('decimal')
if decimal:
scale = 10**len(decimal)
numerator = numerator * scale + int(decimal)
denominator *= scale
exp = m.group('exp')
if exp:
exp = int(exp)
if exp >= 0:
numerator *= 10**exp
else:
denominator *= 10**-exp
if m.group('sign') == '-':
numerator = -numerator
case _:
raise TypeError("argument should be a string "
"or a Rational instance") |
|
Date |
User |
Action |
Args |
2021-05-13 07:07:25 | rhettinger | set | recipients:
+ rhettinger, Martin.Teichmann, veky |
2021-05-13 07:07:25 | rhettinger | set | messageid: <1620889645.21.0.615419551188.issue44115@roundup.psfhosted.org> |
2021-05-13 07:07:25 | rhettinger | link | issue44115 messages |
2021-05-13 07:07:23 | rhettinger | create | |
|