Skip to content

Python: Effortlessly Maintaining Code Style with PEP 8


How to Write Beautiful Python Code With PEP 8

PEP 8, the Python Enhancement Proposal 8, is a document that provides guidelines and best practices on how to write Python code. It was written in 2001 by Guido van Rossum, Barry Warsaw, and Alyssa Coghlan. The main goal of PEP 8 is to improve the readability and consistency of Python code.

By following the guidelines laid out in PEP 8, you can ensure that your Python code is easy to understand and maintain. In this tutorial, we will cover the key guidelines of PEP 8 and provide examples and explanations along the way.

Why We Need PEP 8

Readability is a crucial aspect of any programming language, and Python is no exception. Writing readable code is one of the guiding principles of the Python language, as stated in the Zen of Python. Code is often read and understood by others, including yourself, more often than it is written. Therefore, it is important to write code that is easy to read, understand, and maintain.

PEP 8 provides a set of guidelines that help make Python code more readable. These guidelines include naming conventions, code layout, indentation, comments, whitespace usage, and programming recommendations. By following these guidelines, you can enhance the clarity and readability of your code.

Naming Conventions

One of the first aspects of code readability is choosing appropriate names for variables, functions, classes, and modules. PEP 8 provides guidelines for naming conventions to ensure consistency across Python projects.

Naming Styles

There are several naming styles suggested by PEP 8:

  • Lowercase with underscores: Use this style for variable names, function names, and module names. For example: my_variable, my_function,
  • CapitalizedWords or CamelCase: Use this style for class names. For example: MyClass.
  • UPPERCASE_WITH_UNDERSCORES: Use this style for constant values. For example: MAX_VALUE.

How to Choose Names

When choosing names for your objects, it is important to consider the purpose and meaning of the object. Names should be descriptive and reflect the intent of the object. Avoid using single letters for variable names unless they are used as iterators in a loop.

Code Layout

Code layout refers to the organization and structure of the code. Proper code layout makes the code easier to read and understand.

Blank Lines

PEP 8 suggests using blank lines to separate different sections of the code and to improve readability. Use blank lines between functions, classes, and top-level statements. Additionally, separate logical sections within a function or method with blank lines.

Maximum Line Length and Line Breaking

PEP 8 recommends keeping the maximum line length to 79 characters. This helps prevent the need for horizontal scrolling and improves code readability. If a line exceeds the maximum length, it can be split into multiple lines using parentheses, square brackets, or backslashes.


Indentation is a critical aspect of Python code. It determines the structure and hierarchy of the code. PEP 8 provides guidelines for indentation to ensure consistency across Python projects.

Tabs vs Spaces

PEP 8 recommends using spaces for indentation instead of tabs. Using spaces ensures that the code is displayed consistently across different text editors and environments.

Indentation Following Line Breaks

PEP 8 suggests adding an extra level of indentation following a line break within parentheses, brackets, or braces. This helps visually distinguish the continuation of a statement.

Where to Put the Closing Bracket

In Python, the closing bracket of a multiline construct (such as a function, class, or loop) should be placed on a new line aligned with the starting keyword. This improves readability by clearly indicating the start and end of the construct.


Comments are an essential part of code documentation. They provide additional explanations and help future developers understand the code. PEP 8 provides guidelines for writing comments to ensure clarity and consistency.

Block Comments

Block comments are used to explain the overall code logic or to describe a section of code. PEP 8 recommends using block comments sparingly, focusing instead on writing concise and self-explanatory code.

Inline Comments

Inline comments are used to provide context or explanations for specific lines of code. PEP 8 suggests using inline comments sparingly and only when necessary.

Documentation Strings

Documentation strings, or docstrings, are used to provide documentation for functions, classes, and modules. PEP 8 recommends using docstrings to describe the purpose, inputs, and outputs of the object.

Whitespace in Expressions and Statements

Whitespace plays a crucial role in improving code readability. PEP 8 provides guidelines for using whitespace appropriately in expressions and statements.

Whitespace Around Binary Operators

PEP 8 recommends adding spaces around binary operators (such as +, -, *, /) to improve readability. For example: result = x + y.

When to Avoid Adding Whitespace

There are situations where adding whitespace can hinder readability. PEP 8 suggests avoiding excessive whitespace within parentheses, brackets, or braces, as it can make the code harder to read.

Programming Recommendations

Besides the guidelines mentioned above, PEP 8 provides additional programming recommendations that contribute to code readability. These recommendations include not relying on clever tricks, using exception handling appropriately, and organizing import statements effectively.

When to Ignore PEP 8

While following PEP 8 is generally recommended, there are situations when it may be appropriate to deviate from the guidelines. It is important to consider the specific requirements and constraints of your project or team. In such cases, it is helpful to communicate and discuss the reasons for deviating from PEP 8 with your team members.

Tips and Tricks to Help Ensure Your Code Follows PEP 8

Maintaining code consistency and adhering to PEP 8 guidelines can be challenging, especially in large projects. Fortunately, there are tools and techniques available to help ensure your code follows PEP 8.


Linters are tools that analyze code for potential errors and style violations. They can be configured to enforce PEP 8 guidelines and generate warnings or errors for violations. Examples of Python linters include Pylint, Flake8, and Black.


Autoformatters are tools that automatically format your code according to a specific style guide, such as PEP 8. They can help ensure consistent formatting across your codebase and save time. Examples of Python autoformatters include Black, autopep8, and YAPF.

Combined Tooling

Some tools combine the functionality of linters and autoformatters to provide a comprehensive solution for code analysis and formatting. These tools can automatically fix style violations or generate suggestions for improvement. Examples of combined tooling solutions include PyCharm, VS Code with Python plugins, and pre-commit frameworks like pre-commit and commitizen.


PEP 8 provides a set of guidelines and best practices to improve the readability and consistency of Python code. By following these guidelines, you can ensure that your code is easy to understand and maintain. In this tutorial, we have covered the key guidelines of PEP 8, including naming conventions, code layout, indentation, comments, and whitespace usage. We also discussed programming recommendations and tips to help you enforce PEP 8 guidelines in your projects. By writing code that conforms to PEP 8, you are contributing to the overall readability and maintainability of the Python ecosystem.