diff options
author | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2011-04-13 03:03:39 (GMT) |
---|---|---|
committer | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2011-04-13 03:03:39 (GMT) |
commit | 1a20c121ef3cfc53cf8ec754cbba8ef82933f175 (patch) | |
tree | 839431af17ea6486daafb228c022f8fb4d2e58cf /Lib/decimal.py | |
parent | 2df393cc51034162d572c81a49b549247ef82c97 (diff) | |
download | cpython-1a20c121ef3cfc53cf8ec754cbba8ef82933f175.zip cpython-1a20c121ef3cfc53cf8ec754cbba8ef82933f175.tar.gz cpython-1a20c121ef3cfc53cf8ec754cbba8ef82933f175.tar.bz2 |
Issue #11830: Remove unnecessary introspection code in the decimal module.
Forward ported changesets b4b1f557d563 and f4adc2926bf5 by Raymond
Hettinger in branch '2.7'.
Diffstat (limited to 'Lib/decimal.py')
-rw-r--r-- | Lib/decimal.py | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/Lib/decimal.py b/Lib/decimal.py index e6b70ca..f5277c5 100644 --- a/Lib/decimal.py +++ b/Lib/decimal.py @@ -1650,7 +1650,7 @@ class Decimal(object): self = _dec_from_triple(self._sign, '1', exp_min-1) digits = 0 rounding_method = self._pick_rounding_function[context.rounding] - changed = getattr(self, rounding_method)(digits) + changed = rounding_method(self, digits) coeff = self._int[:digits] or '0' if changed > 0: coeff = str(int(coeff)+1) @@ -1690,8 +1690,6 @@ class Decimal(object): # here self was representable to begin with; return unchanged return Decimal(self) - _pick_rounding_function = {} - # for each of the rounding functions below: # self is a finite, nonzero Decimal # prec is an integer satisfying 0 <= prec < len(self._int) @@ -1758,6 +1756,17 @@ class Decimal(object): else: return -self._round_down(prec) + _pick_rounding_function = dict( + ROUND_DOWN = _round_down, + ROUND_UP = _round_up, + ROUND_HALF_UP = _round_half_up, + ROUND_HALF_DOWN = _round_half_down, + ROUND_HALF_EVEN = _round_half_even, + ROUND_CEILING = _round_ceiling, + ROUND_FLOOR = _round_floor, + ROUND_05UP = _round_05up, + ) + def __round__(self, n=None): """Round self to the nearest integer, or to a given precision. @@ -2554,8 +2563,8 @@ class Decimal(object): if digits < 0: self = _dec_from_triple(self._sign, '1', exp-1) digits = 0 - this_function = getattr(self, self._pick_rounding_function[rounding]) - changed = this_function(digits) + this_function = self._pick_rounding_function[rounding] + changed = this_function(self, digits) coeff = self._int[:digits] or '0' if changed == 1: coeff = str(int(coeff)+1) @@ -3767,18 +3776,6 @@ _numbers.Number.register(Decimal) ##### Context class ####################################################### - -# get rounding method function: -rounding_functions = [name for name in Decimal.__dict__.keys() - if name.startswith('_round_')] -for name in rounding_functions: - # name is like _round_half_even, goes to the global ROUND_HALF_EVEN value. - globalname = name[1:].upper() - val = globals()[globalname] - Decimal._pick_rounding_function[val] = name - -del name, val, globalname, rounding_functions - class _ContextManager(object): """Context manager class to support localcontext(). |