<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Mar 22, 2015 at 11:02 PM, David Foster <span dir="ltr"><<a href="mailto:davidfstr@gmail.com" target="_blank">davidfstr@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">* It's a bit vague how local variables should be typed in the presence of<br>
  multiple assignments. Consider:<br>
<br>
  ```<br>
  if x > 0:<br>
      root = sqrt(x)  # type: int<br>
  else:<br>
      root = None<br>
  ```<br>
<br>
  It seems that the type of `root` should be inferred as `Union[int, None]`<br>
  (AKA `Optional[int]`), but there's no discussion about this type of<br>
  inference in the PEP.<br>
<br>
  Cases like this are the only way that the proposed blank `Undefined`<br>
  value makes sense to me, using an example like:<br>
<br>
  ```<br>
  root = Undefined    # type: Optional[int]<br>
  if x > 0:<br>
      root = sqrt(x)  # type: int<br>
  else:<br>
      root = None<br>
  ```<br></blockquote><div><br></div><div>Right. Another use case for Undefined is class variables (serving as instance variable initialization/declaration).<br><br></div><div>If you feel strongly that this needs to be mentioned in the PEP, can you send a PR to <a href="http://github.com/ambv/typehinting">github.com/ambv/typehinting</a> ? <br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
* +1 for only allowing .pyi as the extension for stub files (and not also .py).<br>
  Makes it very clear that they should only be interpreted as stubs.<br></blockquote><div><br></div><div>Perhaps. Though there are also downsides.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
* -1 that `Optional[T1]` is unnecessary. It's conceptually more clean and<br>
  directly corresponds conceptually to types like `int?` and `?int` from<br>
  other languages.<br></blockquote><div><br></div><div>Indeed, Optional[t] is much clearer to the human reader than Union[t, None].<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
* +1 for the argument order cast(x, T). This is consistent with (x: T) elsewhere.<br></blockquote><div><br></div><div>I disagree on this. It goes against the argument order of casts in other languages, e.g. C, C++, Java, and even in Python -- you write int(x), not x(int).<br></div><div> </div></div>-- <br><div class="gmail_signature">--Guido van Rossum (<a href="http://python.org/~guido">python.org/~guido</a>)</div>
</div></div>