The cleanliness and organization of code are essential for maintainability and readability. A project's coding style and naming conventions are designed to ensure consistency and improve code quality. Here are some examples to check whether the code is clean, organized, and follows the project's coding style and naming conventions:
1. Follow Naming Conventions
Unclean (Incorrect):
def calc_area(r): PI_val = 3.14159 return PI_val * (r ** 2)
Clean (Correct):
def calculate_circle_area(radius): PI_VALUE = 3.14159 return PI_VALUE * (radius ** 2)
Fix Explanation:
The function name
calc_area
is changed tocalculate_circle_area
for better readability and clarity.The parameter
r
is changed toradius
to make it more descriptive.The constant
PI_val
is renamed toPI_VALUE
to follow the naming convention for constants in Python (all uppercase).
2. Code Formatting
Unclean (Incorrect):
import sys,os def func():print('Example function')
Clean (Correct):
import os import sys def function_example(): print('Example function')
Fix Explanation:
Import statements are separated into individual lines to improve readability.
Appropriate spaces and line breaks are added between function definitions and the code inside the function.
3. Avoid Redundant Code
Unclean (Incorrect):
if file_extension == 'jpg' or file_extension == 'jpeg' or file_extension == 'png': process_image(file)
Clean (Correct):
if file_extension in ['jpg', 'jpeg', 'png']: process_image(file)
Fix Explanation:
The condition is simplified by using the
in
operator, reducing redundancy and improving readability.
4. Use Appropriate Comments
Unclean (Incorrect):
# Function to do something def do_something(): pass
Clean (Correct):
def do_something(): # TODO: Implement functionality or explain what the function does pass
Fix Explanation:
Removed unnecessary or obvious comments.
If the function is not implemented yet, a
TODO
comment is used to indicate the need for further implementation or to explain what the function is supposed to do.
5. Follow Line Length Conventions
Unclean (Incorrect):
def calculate_area(length, width): return length * width # This line of code may be too long, exceeding the project’s maximum line length (e.g., 80 or 120 characters).
Clean (Correct):
def calculate_area(length, width): # The following code adheres to the project’s maximum line length convention return length * width
Fix Explanation:
The single line of code is broken into multiple lines to comply with line length restrictions.
6. Proper Error Handling
Unclean (Incorrect):
try: result = 10 / 0 except: pass
Clean (Correct):
try: result = 10 / 0 except ZeroDivisionError as e: logging.error("Attempted to divide by zero") raise
Fix Explanation:
Fixed the empty
except
block by catching the specificZeroDivisionError
.Appropriately logs the error and re-raises it for proper error handling and debugging.
7. Avoid Deep Nesting (Continued)
Unclean (Incorrect):
for i in range(len(data)): if data[i] > 0: # Do some processing if data[i] % 2 == 0: # More processing pass
Clean (Correct):
for value in data: if value <= 0: continue # Do some processing if value % 2 != 0: continue # More processing
Fix Explanation:
Using
continue
reduces the level of nesting, making the code more readable.Replacing
for i in range(len(data))
withfor value in data
makes the code more concise and Pythonic.
8. Clear and Concise Logic
Unclean (Incorrect):
def is_even(number): if number % 2 == 0: return True else: return False
Clean (Correct):
def is_even(number): return number % 2 == 0
Fix Explanation:
Simplified the function by directly returning the result of the condition, instead of using an unnecessary
if/else
structure.
9. Use Consistent String Quotes
In some projects, it may be a convention to use either single or double quotes for consistency.
Unclean (Incorrect):
name = "Alice" greeting = 'Hello, ' + name
Clean (Correct):
name = 'Alice' greeting = 'Hello, ' + name
Or
name = "Alice" greeting = "Hello, " + name
Fix Explanation:
Choose one type of quote (single or double) and stick to it for consistency.
10. Avoid Magic Numbers
Unclean (Incorrect):
timeout = 120 # What is this? Why is it 120?
Clean (Correct):
DEFAULT_TIMEOUT_SECONDS = 120 timeout = DEFAULT_TIMEOUT_SECONDS
Fix Explanation:
Use meaningful constants instead of hardcoding values directly in the code, making it more readable and maintainable.
11. Avoid Long Functions
Unclean (Incorrect):
def process_data(data): # Code spanning dozens of lines pass
Clean (Correct):
def process_data(data): preprocess_data(data) calculate_statistics(data) postprocess_data(data) def preprocess_data(data): # Preprocessing logic pass def calculate_statistics(data): # Statistics calculation pass def postprocess_data(data): # Postprocessing logic pass
Fix Explanation:
Break down long functions into smaller functions, each responsible for a part of the logic, making it easier to understand and maintain.
12. Use Blank Lines Appropriately
Using blank lines to separate logical parts of the code can enhance readability.
Unclean (Incorrect):
def complex_function(): do_first_thing() do_second_thing() do_third_thing() # Missing blank line here, making it hard to distinguish different sections do_fourth_thing()
Clean (Correct):
def complex_function(): do_first_thing() do_second_thing() do_third_thing() do_fourth_thing()
Fix Explanation:
Added blank lines between logically independent code blocks, making the structure of the code clearer.
13. Avoid Too Many Parameters
The number of parameters in a function or method should be kept to a minimum. Too many parameters can make a function hard to understand and use.
Unclean (Incorrect):
def create_user(name, age, gender, email, phone, address, country, state, city, zip_code): pass
Clean (Correct):
class User: def __init__(self, name, age, gender, email, phone, address): pass # Alternatively, use a dictionary or other structure to encapsulate parameters def create_user(user_data): pass
Fix Explanation:
Use classes or data structures to encapsulate related parameters, reducing the complexity of the function signature.
14. Use Descriptive Variable Names
Variable names should clearly describe the purpose of the variable.
Unclean (Incorrect):
a = 3.14 # What is 'a'? r = 5 area = a * r * r
Clean (Correct):
PI = 3.14 radius = 5 circle_area = PI * radius * radius
Fix Explanation:
Use descriptive variable names instead of vague single-letter names.
15. Avoid Unnecessary Global Variables
Global variables should be considered a last resort, as they can make code hard to trace and maintain.
Unclean (Incorrect):
# Some global variable user_count = 0 def increment_user_count(): global user_count user_count += 1
Clean (Correct):
class UserCounter: def __init__(self): self.count = 0 def increment(self): self.count += 1
Fix Explanation:
Use classes or other encapsulation methods to manage state that would otherwise be handled by global variables.
16. Use Version Control System Features
Make use of version control systems (such as Git) to handle code changes, rather than leaving old, commented-out code in the codebase.
Unclean (Incorrect):
# def old_function(): # # Old implementation... # pass def new_function(): # New implementation... pass
Clean (Correct):
def new_function(): # New implementation... pass
Fix Explanation:
Remove old, unused code. Trust that the version control system will allow you to access previous versions when necessary.