mirror of https://github.com/python/cpython
219 lines
9.1 KiB
ReStructuredText
219 lines
9.1 KiB
ReStructuredText
.. highlightlang:: rest
|
|
|
|
Style guide
|
|
===========
|
|
|
|
The Python documentation should follow the `Apple Publications Style Guide`_
|
|
wherever possible. This particular style guide was selected mostly because it
|
|
seems reasonable and is easy to get online.
|
|
|
|
Topics which are either not covered in Apple's style guide or treated
|
|
differently in Python documentation will be discussed in this
|
|
document.
|
|
|
|
Use of whitespace
|
|
-----------------
|
|
|
|
All reST files use an indentation of 3 spaces; no tabs are allowed. The
|
|
maximum line length is 80 characters for normal text, but tables, deeply
|
|
indented code samples and long links may extend beyond that. Code example
|
|
bodies should use normal Python 4-space indentation.
|
|
|
|
Make generous use of blank lines where applicable; they help grouping things
|
|
together.
|
|
|
|
A sentence-ending period may be followed by one or two spaces; while reST
|
|
ignores the second space, it is customarily put in by some users, for example
|
|
to aid Emacs' auto-fill mode.
|
|
|
|
Footnotes
|
|
---------
|
|
|
|
Footnotes are generally discouraged, though they may be used when they are the
|
|
best way to present specific information. When a footnote reference is added at
|
|
the end of the sentence, it should follow the sentence-ending punctuation. The
|
|
reST markup should appear something like this::
|
|
|
|
This sentence has a footnote reference. [#]_ This is the next sentence.
|
|
|
|
Footnotes should be gathered at the end of a file, or if the file is very long,
|
|
at the end of a section. The docutils will automatically create backlinks to
|
|
the footnote reference.
|
|
|
|
Footnotes may appear in the middle of sentences where appropriate.
|
|
|
|
Capitalization
|
|
--------------
|
|
|
|
.. sidebar:: Sentence case
|
|
|
|
Sentence case is a set of capitalization rules used in English
|
|
sentences: the first word is always capitalized and other words are
|
|
only capitalized if there is a specific rule requiring it.
|
|
|
|
Apple style guide recommends the use of title case in section titles.
|
|
However, rules for which words should be capitalized in title case
|
|
vary greaty between publications.
|
|
|
|
In Python documentation, use of sentence case in section titles is
|
|
preferable, but consistency within a unit is more important than
|
|
following this rule. If you add a section to the chapter where most
|
|
sections are in title case you can either convert all titles to
|
|
sentence case or use the dominant style in the new section title.
|
|
|
|
Sentences that start with a word for which specific rules require
|
|
starting it with a lower case letter should be avoided in titles and
|
|
elsewhere.
|
|
|
|
.. note::
|
|
|
|
Sections that describe a library module often have titles in the
|
|
form of "modulename --- Short description of the module." In this
|
|
case, the description should be capitalized as a stand-alone
|
|
sentence.
|
|
|
|
Many special names are used in the Python documentation, including the names of
|
|
operating systems, programming languages, standards bodies, and the like. Most
|
|
of these entities are not assigned any special markup, but the preferred
|
|
spellings are given here to aid authors in maintaining the consistency of
|
|
presentation in the Python documentation.
|
|
|
|
Other terms and words deserve special mention as well; these conventions should
|
|
be used to ensure consistency throughout the documentation:
|
|
|
|
CPU
|
|
For "central processing unit." Many style guides say this should be
|
|
spelled out on the first use (and if you must use it, do so!). For
|
|
the Python documentation, this abbreviation should be avoided since
|
|
there's no reasonable way to predict which occurrence will be the
|
|
first seen by the reader. It is better to use the word "processor"
|
|
instead.
|
|
|
|
POSIX
|
|
The name assigned to a particular group of standards. This is always
|
|
uppercase.
|
|
|
|
Python
|
|
The name of our favorite programming language is always capitalized.
|
|
|
|
reST
|
|
For "reStructuredText," an easy to read, plaintext markup syntax
|
|
used to produce Python documentation. When spelled out, it is
|
|
always one word and both forms start with a lower case 'r'.
|
|
|
|
Unicode
|
|
The name of a character coding system. This is always written
|
|
capitalized.
|
|
|
|
Unix
|
|
The name of the operating system developed at AT&T Bell Labs in the early
|
|
1970s.
|
|
|
|
Affirmative Tone
|
|
----------------
|
|
|
|
The documentation focuses on affirmatively stating what the language does and
|
|
how to use it effectively.
|
|
|
|
Except for certain security risks or segfault risks, the docs should avoid
|
|
wording along the lines of "feature x is dangerous" or "experts only". These
|
|
kinds of value judgments belong in external blogs and wikis, not in the core
|
|
documentation.
|
|
|
|
Bad example (creating worry in the mind of a reader):
|
|
|
|
Warning: failing to explicitly close a file could result in lost data or
|
|
excessive resource consumption. Never rely on reference counting to
|
|
automatically close a file.
|
|
|
|
Good example (establishing confident knowledge in the effective use of the language):
|
|
|
|
A best practice for using files is use a try/finally pair to explicitly
|
|
close a file after it is used. Alternatively, using a with-statement can
|
|
achieve the same effect. This assures that files are flushed and file
|
|
descriptor resources are released in a timely manner.
|
|
|
|
Economy of Expression
|
|
---------------------
|
|
|
|
More documentation is not necessarily better documentation. Err on the side
|
|
of being succinct.
|
|
|
|
It is an unfortunate fact that making documentation longer can be an impediment
|
|
to understanding and can result in even more ways to misread or misinterpret the
|
|
text. Long descriptions full of corner cases and caveats can create the
|
|
impression that a function is more complex or harder to use than it actually is.
|
|
|
|
The documentation for :func:`super` is an example of where a good deal of
|
|
information was condensed into a few short paragraphs. Discussion of
|
|
:func:`super` could have filled a chapter in a book, but it is often easier to
|
|
grasp a terse description than a lengthy narrative.
|
|
|
|
|
|
Code Examples
|
|
-------------
|
|
|
|
Short code examples can be a useful adjunct to understanding. Readers can often
|
|
grasp a simple example more quickly than they can digest a formal description in
|
|
prose.
|
|
|
|
People learn faster with concrete, motivating examples that match the context of
|
|
a typical use case. For instance, the :func:`str.rpartition` method is better
|
|
demonstrated with an example splitting the domain from a URL than it would be
|
|
with an example of removing the last word from a line of Monty Python dialog.
|
|
|
|
The ellipsis for the :attr:`sys.ps2` secondary interpreter prompt should only be
|
|
used sparingly, where it is necessary to clearly differentiate between input
|
|
lines and output lines. Besides contributing visual clutter, it makes it
|
|
difficult for readers to cut-and-paste examples so they can experiment with
|
|
variations.
|
|
|
|
Code Equivalents
|
|
----------------
|
|
|
|
Giving pure Python code equivalents (or approximate equivalents) can be a useful
|
|
adjunct to a prose description. A documenter should carefully weigh whether the
|
|
code equivalent adds value.
|
|
|
|
A good example is the code equivalent for :func:`all`. The short 4-line code
|
|
equivalent is easily digested; it re-emphasizes the early-out behavior; and it
|
|
clarifies the handling of the corner-case where the iterable is empty. In
|
|
addition, it serves as a model for people wanting to implement a commonly
|
|
requested alternative where :func:`all` would return the specific object
|
|
evaluating to False whenever the function terminates early.
|
|
|
|
A more questionable example is the code for :func:`itertools.groupby`. Its code
|
|
equivalent borders on being too complex to be a quick aid to understanding.
|
|
Despite its complexity, the code equivalent was kept because it serves as a
|
|
model to alternative implementations and because the operation of the "grouper"
|
|
is more easily shown in code than in English prose.
|
|
|
|
An example of when not to use a code equivalent is for the :func:`oct` function.
|
|
The exact steps in converting a number to octal doesn't add value for a user
|
|
trying to learn what the function does.
|
|
|
|
Audience
|
|
--------
|
|
|
|
The tone of the tutorial (and all the docs) needs to be respectful of the
|
|
reader's intelligence. Don't presume that the readers are stupid. Lay out the
|
|
relevant information, show motivating use cases, provide glossary links, and do
|
|
your best to connect-the-dots, but don't talk down to them or waste their time.
|
|
|
|
The tutorial is meant for newcomers, many of whom will be using the tutorial to
|
|
evaluate the language as a whole. The experience needs to be positive and not
|
|
leave the reader with worries that something bad will happen if they make a
|
|
misstep. The tutorial serves as guide for intelligent and curious readers,
|
|
saving details for the how-to guides and other sources.
|
|
|
|
Be careful accepting requests for documentation changes from the rare but vocal
|
|
category of reader who is looking for vindication for one of their programming
|
|
errors ("I made a mistake, therefore the docs must be wrong ..."). Typically,
|
|
the documentation wasn't consulted until after the error was made. It is
|
|
unfortunate, but typically no documentation edit would have saved the user from
|
|
making false assumptions about the language ("I was surprised by ...").
|
|
|
|
|
|
.. _Apple Publications Style Guide: http://developer.apple.com/mac/library/documentation/UserExperience/Conceptual/APStyleGuide/APSG_2009.pdf
|
|
|