homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author Marco Sulla
Recipients Marco Sulla, alex, belopolsky, daniel.urban, mark.dickinson, pitrou, rhettinger
Date 2019年12月23日.21:35:06
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1577136906.98.0.60833081943.issue11986@roundup.psfhosted.org>
In-reply-to
Content
marco@buzz:~$ python3.9
Python 3.9.0a0 (heads/master-dirty:d8ca2354ed, Oct 30 2019, 20:25:01) 
[GCC 9.2.1 20190909] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from decimal import Decimal as Dec, BasicContext as Bctx
>>> a = Dec("1981", Bctx)
>>> b = Dec("nan", Bctx)
>>> a.max(b)
Decimal('1981')
>>> b.max(a)
Decimal('1981')
>>> Bctx.max(a, b)
Decimal('1981')
>>> Bctx.max(b, a)
Decimal('1981')
`Decimal` completely adheres to IEEE 754 standard.
There's a very, very simple and generic solution for builtin min and max:
_sentinel = object()
def max(*args, key=None, default=_sentinel):
 args_len = len(args)
 
 if args_len == 0:
 if default is _sentinel:
 fname = max.__name__
 raise ValueError(f"{fname}() expected 1 argument, got 0")
 
 return default
 elif args_len == 1:
 seq = args[0]
 else:
 seq = args
 
 it = iter(seq)
 
 vmax = next(it, _sentinel)
 
 if vmax is _sentinel:
 if default is _sentinel:
 fname = max.__name__
 raise ValueError(f"{fname}() arg is an empty sequence")
 
 return default
 
 
 first_comparable = False
 
 if key is None:
 for val in it:
 if vmax < val:
 vmax = val
 first_comparable = True
 elif not first_comparable and not val < vmax :
 # equal, or not comparable object, like NaN
 vmax = val
 else:
 fmax = key(vmax)
 
 for val in it:
 fval = key(val)
 
 if fmax < fval :
 fmax = fval
 vmax = val
 first_comparable = True
 elif not first_comparable and not fval < fmax:
 fmax = fval
 vmax = val
 
 return vmax
This function continues to give undefined behavior with sets... but who calculates the "maximum" or "minimum" of sets?
History
Date User Action Args
2019年12月23日 21:35:07Marco Sullasetrecipients: + Marco Sulla, rhettinger, mark.dickinson, belopolsky, pitrou, alex, daniel.urban
2019年12月23日 21:35:06Marco Sullasetmessageid: <1577136906.98.0.60833081943.issue11986@roundup.psfhosted.org>
2019年12月23日 21:35:06Marco Sullalinkissue11986 messages
2019年12月23日 21:35:06Marco Sullacreate

AltStyle によって変換されたページ (->オリジナル) /