Crafting Modular Python Scripts with Functions and Classes
Discover techniques for breaking down your Python programs into modular components using functions and classes for improved code reusability and clarity.
0 likes
171 views
Rule Content
{
"title": "Crafting Modular Python Scripts with Functions and Classes",
"description": "Discover techniques for breaking down your Python programs into modular components using functions and classes for improved code reusability and clarity.",
"category": "Python Cursor Rules",
"rules": [
{
"name": "Use Functions for Reusable Code Blocks",
"description": "Encapsulate repetitive or logically distinct code segments into functions to promote reusability and maintainability.",
"examples": [
{
"before": "for i in range(10):\n print(f'Processing item {i}')\n # complex processing logic here",
"after": "def process_item(i):\n print(f'Processing item {i}')\n # complex processing logic here\n\nfor i in range(10):\n process_item(i)"
}
]
},
{
"name": "Define Classes for Related Data and Behavior",
"description": "Group related data and methods into classes to create cohesive and modular code structures.",
"examples": [
{
"before": "name = 'Widget'\nprice = 19.99\n\nprint(f'Product: {name}, Price: ${price}')",
"after": "class Product:\n def __init__(self, name, price):\n self.name = name\n self.price = price\n\n def display(self):\n print(f'Product: {self.name}, Price: ${self.price}')\n\nwidget = Product('Widget', 19.99)\nwidget.display()"
}
]
},
{
"name": "Follow PEP 8 Naming Conventions",
"description": "Adhere to PEP 8 guidelines for naming functions and classes to ensure code consistency and readability.",
"examples": [
{
"before": "def CalculateSum(a, b):\n return a + b\n\nclass product:\n def __init__(self, name, price):\n self.name = name\n self.price = price",
"after": "def calculate_sum(a, b):\n return a + b\n\nclass Product:\n def __init__(self, name, price):\n self.name = name\n self.price = price"
}
]
},
{
"name": "Limit Function and Method Length",
"description": "Keep functions and methods concise, ideally under 50 lines, to enhance readability and maintainability.",
"examples": [
{
"before": "def process_data(data):\n # 100 lines of processing logic",
"after": "def process_data(data):\n processed_data = step_one(data)\n processed_data = step_two(processed_data)\n return processed_data\n\ndef step_one(data):\n # 25 lines of processing logic\n\ndef step_two(data):\n # 25 lines of processing logic"
}
]
},
{
"name": "Use Docstrings for Functions and Classes",
"description": "Provide clear docstrings for all functions and classes to document their purpose, parameters, and return values.",
"examples": [
{
"before": "def add(a, b):\n return a + b",
"after": "def add(a, b):\n \"\"\"\n Add two numbers together.\n\n Parameters:\n a (int): The first number.\n b (int): The second number.\n\n Returns:\n int: The sum of a and b.\n \"\"\"\n return a + b"
}
]
},
{
"name": "Avoid Global Variables",
"description": "Minimize the use of global variables to reduce dependencies and potential side effects, enhancing modularity.",
"examples": [
{
"before": "config = {'setting': True}\n\ndef process():\n if config['setting']:\n # processing logic",
"after": "def process(config):\n if config['setting']:\n # processing logic\n\nconfig = {'setting': True}\nprocess(config)"
}
]
},
{
"name": "Implement Error Handling in Functions and Methods",
"description": "Incorporate appropriate error handling within functions and methods to manage exceptions gracefully and maintain code robustness.",
"examples": [
{
"before": "def divide(a, b):\n return a / b",
"after": "def divide(a, b):\n try:\n return a / b\n except ZeroDivisionError:\n return 'Error: Division by zero is undefined.'"
}
]
}
]
}