[Python-Dev] Re: 3.10 change (?) for __bool__

2021年1月12日 22:05:33 -0800

On Wed, Jan 13, 2021 at 04:47:06AM +1100, Chris Angelico wrote:
> That'd leave open
> the option for "foo() if x else foo()" to be optimized down to just
> "foo()", although I don't think that particular one is needed.
That would be an unsafe optimization. Not all objets are representable 
as truthy/falsey values, e.g. numpy arrays.
 >>> bool(a)
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 ValueError: The truth value of an array with more than one element 
 is ambiguous. Use a.any() or a.all()
Not even all builtin values. This is in Python 3.9:
 >>> bool(NotImplemented)
 <stdin>:1: DeprecationWarning: NotImplemented should not be used in 
 a boolean context
 True
I believe that 3.10 makes it an error. If not 3.10, then it will surely 
happen soon. But even without the change to NotImplemented, it has never 
been the case that *every* object is guaranteed to be either truthy or 
falsey. At least not since the Python 1.x `__nonzero__` dunder was put 
into the language.
-- 
Steve
_______________________________________________
Python-Dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/[email protected]/message/7Q76EALFDEI2S6L3NFXSJS4TNNEWMO6L/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to