[Python-Dev] PEP 484 proposal: don't default to Optional if argument default is None (original) (raw)

Carl Meyer carl at oddbird.net
Tue May 9 14:03:05 EDT 2017


On 05/09/2017 10:28 AM, Guido van Rossum wrote:

There's a proposal to change one detail of PEP 484. It currently says:

An optional type is also automatically assumed when the default value is |None|, for example:: |def handleemployee(e: Employee = None): ... | This is equivalent to:: |def handleemployee(e: Optional[Employee] = None) -> None: ... |

Now that we've got some experience actually using Optional with mypy (originally mypy ignored Optional), we're beginning to think that this was a bad idea. There's more discussion at https://github.com/python/typing/issues/275 and an implementation of the change (using a command-line flag) in https://github.com/python/mypy/pull/3248. Thoughts? Some function declarations will become a bit more verbose, but we gain clarity (many users of annotations don't seem to be familiar with this feature) and consistency (since this rule doesn't apply to variable declarations and class attribute declarations).

I've been code-reviewing a lot of diffs adding type coverage over the last few months, and implicit-Optional has been among the most common points of confusion. So I favor this change.

It might be nice to have a less verbose syntax for Optional, but that can be a separate discussion.

Carl

-------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: OpenPGP digital signature URL: <http://mail.python.org/pipermail/python-dev/attachments/20170509/e850ad49/attachment.sig>



More information about the Python-Dev mailing list