It contains some conventions in coding with Python. They make the codes clearer and more beautiful. Read the full doc here. Below are just some of them in my choice.
- Package & module names & function & variable:
all_lower_caseorshortwithunderscore.
- Class names: use
CapWords.
- Constant:
ALL_CAPITAL_LETTERS.
- Avoid these:
1l = 1 # lowercase letter el
2O = 1 # uppercase letter oh
3I = 1 # uppercase letter eye
4
5Capitalized_Words_With_Underscores = 1 # uglyUse 4 spaces per indentation level. Note that, in this site, for a better view, I use 2 spaces for the code highlight.
1# Do
2def func(...):
3 commands # 4 spaces1# Don't
2def func(...):
3 commands # 2 spacesVertical align when break a continuous line:
1# Do
2foo = long_function_name(var_one, var_two,
3 var_three, var_four)1# Don't
2foo = long_function_name(var_one, var_two,
3 var_three, var_four)Distinguish arguments from the rest:
1# Do
2def long_function_name(
3 var_one, var_two, var_three,
4 var_four):
5 print(var_one)1# Don't
2def long_function_name(
3 var_one, var_two, var_three,
4 var_four):
5 print(var_one)Spaces are preferred. Don't mix tabs and spaces (not allowed in Python 3).
Max of 79 characters.
Operators should go with operands
1# Do
2income = (salary
3 + sale)1# Don't
2income = (salary +
3 sale)Imports should usually be on separate lines:
1# Do
2import os
3import sys1# Don't
2import os, sys1# But yes
2from subprocess import Popen, PIPEAvoid extraneous whitespace:
1# Do
2spam(ham[1], {eggs: 2})
3foo = (0,)
4if x == 4: print x, y; x, y = y, x1# Don't
2spam( ham[ 1 ], { eggs: 2 } )
3bar = (0, )
4if x == 4 : print x , y ; x , y = y , xFor slices
1# Do
2ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
3ham[lower:upper], ham[lower:upper:], ham[lower::step]
4ham[lower+offset : upper+offset]
5ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]
6ham[lower + offset : upper + offset]1# Don't
2ham[lower + offset:upper + offset]
3ham[1: 9], ham[1 :9], ham[1:9 :3]
4ham[lower : : upper]
5ham[ : upper]Add open parenthesis/bracket right after:
1# Do
2spam(1)
3dct['key'] = lst[index]1# Don't
2spam (1)
3dct ['key'] = lst [index]No need to have verticle alignment:
1# Do
2x = 1
3y = 2
4long_variable = 31# Don't
2x = 1
3y = 2
4long_variable = 3With operators:
1# Do
2i = i + 1
3submitted += 1
4x = x*2 - 1
5hypot2 = x*x + y*y
6c = (a+b) * (a-b)1# Don't
2i=i+1
3submitted +=1
4x = x * 2 - 1
5hypot2 = x * x + y * y
6c = (a + b) * (a - b)Def of a function:
1# Do
2def complex(real, imag=0.0):
3 return magic(r=real, i=imag)1# Don't
2def complex(real, imag = 0.0):
3 return magic(r = real, i = imag)Using
not inside if:1# Do
2if foo is not None:1# Don't
2if not foo is None:Using Use
.startswith() and .endswith() instead of string slicing:1# Do
2if foo.startswith('bar'):1# Don't
2if foo[:3] == 'bar':For sequences, (strings, lists, tuples), use the fact that empty sequences are false:
1# Do
2if not seq:
3if seq:1# Don't
2if len(seq):
3if not len(seq):Don't compare boolean values to True or False using
==:1# Do
2if greeting:1# Don't
2if greeting == True:1# Worse
2if greeting is True: