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 -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/7Q76EALFDEI2S6L3NFXSJS4TNNEWMO6L/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to