On Sun, Sep 4, 2016 at 7:44 AM, Koos Zevenhoven <k7ho...@gmail.com> wrote: >> I wonder if it would be different if you wrote that as a single expression: >> >> x = 1 if cond else 1.5 >> >> x = sum([1] + [0.5] * cond) >> >> What should type inference decide x is in these cases? Assume an >> arbitrarily smart type checker that can implement your ideal; it's >> equally plausible to pretend that the type checker can recognize an >> if/else block (or even if/elif/else tree of arbitrary length) as a >> single "assignment" operation. IMO both of these examples - and by >> extension, the if/else of the original - should be assigning a Union >> type. > > In the first case it would indeed again be Union[int, float] (the code > is basically equivalent after all). > > In the second case, the checker would infer List[Union[int, float]]. > No magic involved, assuming that list.__add__ is annotated precisely > enough.
I think you missed the sum() call there. Most likely, the sum of List[Union[anything]] would be Union[anything], so these would all be the same (which was my original point). ChrisA _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/