[Python-checkins] cpython (3.2): Issue #11830: Remove unnecessary introspection code in the decimal module.
alexander.belopolsky
python-checkins at python.org
Wed Apr 13 05:09:03 CEST 2011
http://hg.python.org/cpython/rev/f5d5f3f4c081
changeset: 69314:f5d5f3f4c081
branch: 3.2
parent: 69311:dfbbe4c1a7bb
user: Alexander Belopolsky <alexander.belopolsky at gmail.com>
date: Tue Apr 12 23:03:39 2011 -0400
summary:
Issue #11830: Remove unnecessary introspection code in the decimal module.
Forward ported changesets b4b1f557d563 and f4adc2926bf5 by Raymond
Hettinger in branch '2.7'.
files:
Lib/decimal.py | 31 ++++++++++++++-----------------
Misc/NEWS | 2 ++
2 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/Lib/decimal.py b/Lib/decimal.py
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -1650,7 +1650,7 @@
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 @@
# 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 @@
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 @@
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 @@
##### 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().
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -53,6 +53,8 @@
Library
-------
+- Issue #11830: Remove unnecessary introspection code in the decimal module.
+
- Issue #11703 - urllib2.geturl() does not return correct url when the original
url contains #fragment.
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list