Current specifications are based on pep-0008
Basic formatting indentation
Indent with 4 spaces
Line width
Try not to exceed 80 characters per line of code
Reason:
- This is helpful when looking at Side-by-side diff.
- Easy to view code under the console
- Too long could be a flawed design
Line break
Python supports line breaks in parentheses. There are two kinds of situations.
- The second line indents to the beginning of the parentheses
= Long_function_name (Var_one, Var_two, Var_three, Var_four)
- The second line indents 4 spaces, applies to the case where the starting parenthesis wraps
Long_function_name ( var_three, print (var_one)
With backslash \
wrapping, the two-dollar operator, and so on, +
.
should appear at the beginning of the line and align with the previous row, .
=
or indent 4 spaces. Long strings can also be wrapped in this method.
foo = variable_with_long_name + another_variable + V Ariablesession.query (MyTable). filter_by (id=1). One () This_is_a_very_long (Function_call, ' with many parameters print < Span class= "Pl-pds" > ' Hello, ' ' % s %s! % ( ' Harry "< Span class= "Pl-pds" > ' Potter "
List or tuple of multiple elements, wrapping after starting brackets, 4 spaces in the second line
= [' This was the first ' Set of items' with ' + more items ' to come ' "This']
A compound statement is prohibited, that is, a row contains multiple statements:
# Yesdo_first () Do_second () Do_third ()# Nodo_first ();d o_second ();d o_third ();
if/for/while
Be sure to change the line:
# Yes' blah': do_blah_thing ()# no' blah': do_blash_thing ()
Blank Line
- Two empty lines between the module-level function and the class definition;
- An empty line between class member functions;
- Do not use too many contiguous blank lines to differentiate the logical blocks of code
A: "" "This is a simple docstring. " "" " __init__ (hello (passhello (%s! % NamePass
- Multiple empty rows can be used to separate multiple sets of related functions
- A function can use a blank line to separate logically related code
Expression spaces
- Unary operators do not add spaces
- On each side of the two-dollar operator, empty one lattice
[=,-,+=,==,>,in,is not, and]
:
# Yesexp=-1.05i= I+1submitted+=1x= X*2-1hypot2 = x * x + y * yc = (a + b) * (a -B) # noexp = -1.05i< Span class= "pl-k" >=i+1submitted += 1x = x*2 - 1hypot2 = x*x + y*yc = (A+b) * (A-b)
- The argument list of the function,
,
followed by a space
# Yescomplex (pass# nocomplex (Real,pass
- In the parameter list of the function, do not add spaces between the default equals sign
# Yescomplex (imag=passcomplex (pass
- After opening parenthesis, do not add extra space before closing parenthesis.
# yesspam (ham[= My_list[index]# nospam (ham[= my_list[index]
- No extra spaces before the opening parenthesis of a dictionary or List object
# yesdict[' key= List[index]# nodict [' Key= list [index]
- Do not use extra spaces for Zishing value statements
33
Comparison
- Use variable on left, constant in right
- Do not display a comparison of the pairs
True
, False
- Negative comparisons are adopted
foo not in bar
in the form of, rather thannot foo in bar
- Use the
instance(a, C)
type check for the instance, nottype(A) is C
# YesIf method==' MD5': pass if not foo: passif Foo not in bar: PassIf instance (A, C): Pass# N oif ' md5' = = method: passif foo = = False: pass if not foo in ba R: Passif type (A) is C: pass
Quotes
Simply put, the natural language uses double quotes, the machine is marked with single quotes, so most of the code should use single quotes
- Use double quotation marks for natural language
"..."
such as error messages; In many cases Unicode, useu"你好世界"
- machine identification using single quotes
‘...‘
such as key in Dict
- Regular Expressions use native double quotes
r"..."
- document characters use three double quotation marks
"""......"""
Import statement
- Import statements should be written in branches
# Yesimport OSimport sys# noimport sys,os# YesPIPE
- The import statement should use absolute import
# Yesimport Bar# noimport bar
- The import statement should be placed at the head of the file, after the module description and docstring, before the global variable;
- Import statements should be ordered in order, separated by a blank line between each group
Import OSimport sysimport msgpackimport zmqimport foo
- When you import class definitions for other modules, you can use relative imports
Import MyClass
- If a naming conflict occurs, you can use the namespace
Import Foo.barbar.Bar () Foo.bar.Bar ()
Comment Block Comment
#
After the number is empty, the paragraphs are separated by a blank line (the same number is required #
)
# block Comment # block Comment ## block Comment # block comment
Line Comment
Use at least two spaces and statements to separate, using meaningful annotations
1 # border Bold one pixel
DocString
The docstring specification is described in detail in PEP 257, where the two points are the most:
- All public modules, functions, classes, methods, should be written docstring. Private methods are not necessarily required, but a block comment should be provided after the def to illustrate.
- The docstring "" "should have a single line unless this docstring has only one row.
"" "Return a foobarOptional Plotz says to frobnicate the Bizbaz first." " "" " oneline docstring " ""
Naming conventions
- Avoid using lowercase letters
l(L)
, uppercase letters, O(o)
or I(i)
separate names as a variable to differentiate between numbers 1
and0
- Packages and modules use all lowercase names and try not to use underscores
- The class name uses
CamelCase
a naming style, and the inner class can start with an underscore;
The contracted abbreviations are left as-is, for example, to use HTTPWriter
insteadHttpWriter
- The function uses an underscore-delimited lowercase name,
lowercase_with_underscores
- When the parameter name and the python reserved word conflict, you can add an underscore at the end and try not to use abbreviations or self-made words
- Constants are named with an underscore-delimited capitalization,
UPPERCASE_WITH_UNDERSCORES
- Precompiled Regular Expressions:
name_re
100Class FooBar: foo_bar (
Function and Method arguments:
- Class methods: As first
cls
parameter.
- Instance methods: As first
self
parameter.
- Lambdas for properties is the first parameter replaced
x
with, as in display_name = property(lambda x: x.real_name or x.username)
.
Coding
- File using UTF-8 encoding
- File header Join
#-*-coding:utf-8-*-
logo
Python Code format specification