Index: Lib/decimal.py =================================================================== --- Lib/decimal.py (revision 82414) +++ Lib/decimal.py (working copy) @@ -3810,21 +3810,41 @@ Emin=None, Emax=None, capitals=None, clamp=None, _ignored_flags=None): + # Set defaults; for everything except flags and _ignored_flags, + # inherit from DefaultContext. + if prec is None: + prec = DefaultContext.prec + if rounding is None: + rounding = DefaultContext.rounding + if traps is None: + traps = dict(DefaultContext.traps) + elif not isinstance(traps, dict): + traps = {s: int(s in traps) for s in _signals} if flags is None: - flags = [] + flags = {s: 0 for s in _signals} + elif not isinstance(flags, dict): + flags = {s: int(s in flags) for s in _signals} + if Emin is None: + Emin = DefaultContext.Emin + if Emax is None: + Emax = DefaultContext.Emax + if capitals is None: + capitals = DefaultContext.capitals + if clamp is None: + clamp = DefaultContext.clamp if _ignored_flags is None: _ignored_flags = [] - if not isinstance(flags, dict): - flags = dict([(s, int(s in flags)) for s in _signals]) - if traps is not None and not isinstance(traps, dict): - traps = dict([(s, int(s in traps)) for s in _signals]) - for name, val in locals().items(): - if val is None: - setattr(self, name, _copy.copy(getattr(DefaultContext, name))) - else: - setattr(self, name, val) - del self.self + self.prec = prec + self.rounding = rounding + self.traps = traps + self.flags = flags + self.Emin = Emin + self.Emax = Emax + self.capitals = capitals + self.clamp = clamp + self._ignored_flags = _ignored_flags + def __repr__(self): """Show the current context.""" s = []