Python Naming Convention
Python Naming Convention
- UPPERCASE / UPPER_CASE_WITH_UNDERSCORES => module-level constants
- lowercase / lower_case_with_underscores => for variable and function name.
- CapitalizedWords (or CapWords, or CamelCase – so named because of the bumpy look of its letters [4]). This is also sometimes known as StudlyCaps. => CamelCase => Class
- Note: When using acronyms in CapWords, capitalize all the letters of the acronym. Thus HTTPServerError is better than HttpServerError.
- mixedCase (differs from CapitalizedWords by initial lowercase character!)
- Capitalized_Words_With_Underscores (ugly!)
- _single_leading_underscore: weak “internal use” indicator. E.g. from M import * does not import objects whose names start with an underscore.
- single_trailing_underscore_: used by convention to avoid conflicts with Python keyword, e.g. tkinter.Toplevel(master, class_=’ClassName’)
- __double_leading_underscore: when naming a class attribute, invokes name mangling (inside class FooBar, __boo becomes _FooBar__boo; see below).
- __double_leading_and_trailing_underscore__: “magic” objects or attributes that live in user-controlled namespaces. E.g. __init__, __import__ or __file__. Never invent such names; only use them as documented.
- Never use the characters ‘l’ (lowercase letter el), ‘O’ (uppercase letter oh), or ‘I’ (uppercase letter eye) as single character variable names.
Programming Recommendations
Use “is not” operator
- Correct:
if foo is not None:
- Wrong:
if not foo is None:
Always use a def statement
- Correct:
def f(x): return 2*x
- Wrong:
f = lambda x: 2*x
all try/except clauses
- Correct:
try: value = collection[key] except KeyError: return key_not_found(key) else: return handle_value(value)
- Wrong:
try: # Too broad! return handle_value(collection[key]) except KeyError: # Will also catch KeyError raised by handle_value() return key_not_found(key)
Context managers should be invoked through separate functions or methods
- Correct:
with conn.begin_transaction():
do_stuff_in_transaction(conn)
- Wrong:
with conn:
do_stuff_in_transaction(conn)
Be consistent in return statements
- Correct:
def foo(x):
if x >= 0:
return math.sqrt(x)
else:
return None
def bar(x):
if x < 0:
return None
return math.sqrt(x)
- Wrong:
def foo(x):
if x >= 0:
return math.sqrt(x)
def bar(x):
if x < 0:
return
return math.sqrt(x)
startswith, endswith
- Use ‘‘.startswith() and ‘‘.endswith() instead of string slicing to check for prefixes or suffixes.
- Correct: if foo.startswith(‘bar’):
- Wrong: if foo[:3] == ‘bar’:
Object type comparisons
- Correct: if isinstance(obj, int):
- Wrong: if type(obj) is type(1):
Sequences, (strings, lists, tuples)
-For sequences, (strings, lists, tuples), use the fact that empty sequences are false:
- Correct:
if not seq:
if seq:
- Wrong:
if len(seq):
if not len(seq):
boolean value comparision
Don’t compare boolean values to True or False using ==:
- Correct: if greeting:
- Wrong: if greeting == True:
- Worse: if greeting is True:
Assignment
If an assignment has a right hand side, then the equality sign should have exactly one space on both sides:
- Correct: ```python code: int
class Point:
coords: Tuple[int, int]
label: str = ‘
- Wrong:
```python
code:int # No space after colon
code : int # Space before colon
class Test:
result: int=0 # No spaces around equality sign
References
- https://peps.python.org/pep-0008/#programming-recommendations