On 2/19/19 8:28 AM, Samuel Colvin wrote:

> Let's take a real life example from here
> <https://github.com/samuelcolvin/pydantic/blob/master/pydantic/utils.py#L246>
> (changed very slightly for this example), in tranitional python the
> signature might be:
>
> def resolve_annotations(raw_annotations, module_name):
>
> 55 characters, all fine. Now let's look at that same function in
> modern python with type hints:
>
> def resolve_annotations(*, raw_annotations: Dict[str, Type[Any]], module_name: Optional[str]) -> Dict[str, Type[Any]]:

If it were me, I'd probably write (or would have re-written when I added
the type hints) that as follows:

    def resolve_annotations(
            *,
            raw_annotations: Dict[str, Type[Any]],
            module_name: Optional[str]
        ) -> Dict[str, Type[Any]]:

which leaves the longest line at 46 characters, even shorter than your
original 55.

And if the type hints are long, then a similar approach can mitigate
that:

    def resolve_annotations(
            *,
            raw_annotations:
                Dict[str, Type[Any]],
            module_name:
                Optional[str]
        ) -> Dict[str, Type[Any]]:

> Type hints (for good or bad depending on your view point) have made
> python code more verbose, that's just a fact. Code that used to fit on
> one line with 80char limit now require 120 (or more), therefore in my
> opinion the recommendation should change to keep up with changes in
> python.

Nothing says that you have to write an entire function header on one
line.
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to