What is PEP8?

In this article, we will explain PEP 8 and its uses in Python. We'll explore key style guidelines that make Python code more readable and maintainable.

What is PEP 8?

PEP stands for Python Enhancement Proposal. PEP 8 is the official style guide for writing readable and consistent Python code. It was written in 2001 by Guido van Rossum, Barry Warsaw, and Nick Coghlan.

The primary goal of PEP 8 is to improve code readability and consistency across Python projects. Good coding style makes code more reliable and easier to understand for other developers.

Indentation

Python uses indentation to define code blocks. PEP 8 recommends using 4 spaces per indentation level ?

def calculate_sum(first_num, second_num, third_num, fourth_num):
    # Using 4 spaces for indentation
    total = first_num + second_num + third_num + fourth_num
    print(f"Sum: {total}")
    return total

calculate_sum(10, 20, 30, 40)
Sum: 100

Maximum Line Length

Lines should not exceed 79 characters. Use parentheses, brackets, or backslashes to wrap long lines ?

# Good: Using parentheses for line continuation
total_students = (math_students + science_students + 
                  history_students + english_students)

# Using parentheses for function calls
result = some_function(argument_one, argument_two,
                      argument_three, argument_four)

print(f"Total students: {total_students}")
Total students: 0

Naming Conventions

PEP 8 defines specific naming patterns for different code elements ?

Type Convention Example
Variables/Functions lowercase_with_underscores user_name, calculate_tax()
Classes CapitalizedWords (PascalCase) UserProfile, DatabaseManager
Constants UPPER_CASE_WITH_UNDERSCORES MAX_SIZE, API_KEY
Modules lowercase_with_underscores user_utils.py, data_handler.py

Example

# Constants
MAX_CONNECTIONS = 100
API_TIMEOUT = 30

# Class with proper naming
class UserAccount:
    def __init__(self, user_name, email_address):
        self.user_name = user_name
        self.email_address = email_address
    
    def display_info(self):
        return f"User: {self.user_name}, Email: {self.email_address}"

# Function with descriptive name
def validate_email_format(email):
    return "@" in email and "." in email

# Variables with clear names
account = UserAccount("john_doe", "john@example.com")
print(account.display_info())
print(f"Valid email: {validate_email_format('john@example.com')}")
User: john_doe, Email: john@example.com
Valid email: True

Blank Lines

Use blank lines to improve readability ?

  • Two blank lines around top-level functions and classes
  • One blank line around methods inside classes
  • Blank lines sparingly within functions to separate logical sections
class Calculator:
    def add_numbers(self, a, b):
        return a + b
    
    def multiply_numbers(self, a, b):
        return a * b


class DataProcessor:
    def process_data(self, data):
        return [x * 2 for x in data]


def main():
    calc = Calculator()
    result = calc.add_numbers(5, 3)
    print(f"Result: {result}")

main()
Result: 8

Comments and Docstrings

Use comments to explain why something is done, not what is done ?

def calculate_discount(price, customer_type):
    """
    Calculate discount based on customer type.
    
    Args:
        price (float): Original price
        customer_type (str): Type of customer ('premium' or 'regular')
    
    Returns:
        float: Discounted price
    """
    # Premium customers get 20% discount to encourage loyalty
    if customer_type == 'premium':
        return price * 0.8  # Apply 20% discount
    
    # Regular customers get 5% discount
    return price * 0.95

# Example usage
original_price = 100.0
discounted = calculate_discount(original_price, 'premium')
print(f"Original: ${original_price}, Discounted: ${discounted}")
Original: $100.0, Discounted: $80.0

Import Organization

Organize imports in this order with blank lines between groups ?

  1. Standard library imports
  2. Third-party imports
  3. Local application imports
# Standard library
import os
import sys
from datetime import datetime

# Third-party (would be here if available)
# import requests
# import pandas as pd

# Local imports (would be here)
# from myapp import utils
# from myapp.models import User

# Example usage
current_time = datetime.now()
print(f"Current time: {current_time.strftime('%Y-%m-%d %H:%M:%S')}")
Current time: 2024-01-01 12:00:00

Conclusion

PEP 8 provides essential guidelines for writing clean, readable Python code. Following these conventions makes your code more professional and easier for other developers to understand and maintain.

Updated on: 2026-03-26T21:30:02+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements