From 19f31499d7610e940f5d53f6358e4766eb426152 Mon Sep 17 00:00:00 2001 From: Google Python team Date: Tue, 23 Jan 2024 13:03:19 -0800 Subject: [PATCH] Project import generated by Copybara. PiperOrigin-RevId: 600882442 --- pyguide.md | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/pyguide.md b/pyguide.md index 0c9ba3d..0925808 100644 --- a/pyguide.md +++ b/pyguide.md @@ -2093,16 +2093,18 @@ aptly described using a one-line docstring. : Describe the semantics of the return value, including any type information that the type annotation does not provide. If the function only returns None, this section is not required. It may also be omitted if the docstring - starts with Returns or Yields (e.g. `"""Returns row from Bigtable as a tuple - of strings."""`) and the opening sentence is sufficient to describe the - return value. Do not imitate older 'NumPy style' + starts with "Return", "Returns", "Yield", or "Yields" (e.g. `"""Returns row + from Bigtable as a tuple of strings."""`) *and* the opening sentence is + sufficient to describe the return value. Do not imitate older 'NumPy style' ([example](https://numpy.org/doc/1.24/reference/generated/numpy.linalg.qr.html)), which frequently documented a tuple return value as if it were multiple return values with individual names (never mentioning the tuple). Instead, describe such a return value as: "Returns: A tuple (mat_a, mat_b), where mat_a is ..., and ...". The auxiliary names in the docstring need not necessarily correspond to any internal names used in the function body (as - those are not part of the API). + those are not part of the API). If the function uses `yield` (is a + generator), the `Yields:` section should document the object returned by + `next()`, instead of the generator object itself that the call evaluates to. [*Raises:*](#doc-function-raises) @@ -2539,7 +2541,7 @@ messages shown to the user) should follow three guidelines: ```python Yes: if not 0 <= p <= 1: - raise ValueError(f'Not a probability: {p!r}') + raise ValueError(f'Not a probability: {p=}') try: os.rmdir(workdir) @@ -2551,7 +2553,7 @@ messages shown to the user) should follow three guidelines: ```python No: if p < 0 or p > 1: # PROBLEM: also false for float('nan')! - raise ValueError(f'Not a probability: {p!r}') + raise ValueError(f'Not a probability: {p=}') try: os.rmdir(workdir) @@ -3114,13 +3116,20 @@ the function into smaller and more manageable pieces. * Familiarize yourself with [PEP-484](https://peps.python.org/pep-0484/). -* In methods, only annotate `self`, or `cls` if it is necessary for proper - type information. e.g., +* Annotating `self` or `cls` is generally not necessary. + [`Self`](https://docs.python.org/3/library/typing.html#typing.Self) can be + used if it is necessary for proper type information, e.g. ```python - @classmethod - def create(cls: Type[_T]) -> _T: - return cls() + from typing import Self + + class BaseClass: + @classmethod + def create(cls) -> Self: + ... + + def difference(self, other: Self) -> float: + ... ``` * Similarly, don't feel compelled to annotate the return value of `__init__`