BitSize Python Coding Tips: 20-40

This article is part 2 of 100 BitSize Python Coding Tips and includes Tips 20 to 40.

21. Dictionary Comprehension with Conditional Logic

Use dictionary comprehensions with conditions to efficiently create dictionaries.

nums = [1, 2, 3, 4, 5]
num_to_square = {x: x**2 for x in nums if x % 2 == 0}

22. The any() and all() Functions

These functions are useful for checking conditions across iterables. any() returns True if any element of the iterable is true, while all() returns True if all elements are true.

conditions = [True, False, True]
print(any(conditions))  # True
print(all(conditions))  # False

23. getattr() and setattr()

Dynamically access or set an attribute of an object.

class MyClass:
    name = 'John'

obj = MyClass()
print(getattr(obj, 'name'))  # 'John'
setattr(obj, 'name', 'Doe')
print(obj.name)  # 'Doe'

24. The re Module for Regular Expressions

Regular expressions are a powerful tool for string searching and manipulation.

import re
pattern = re.compile(r'\bfoo\b')
matches = pattern.findall('foo bar (foo) baz')

25. Using try and except Blocks

Exception handling is crucial for writing robust code.

try:
    # risky operation
    result = 10 / 0
except ZeroDivisionError:
    print("Divided by zero!")

26. The glob Module for File Paths

Use the glob module to find files on the file system using patterns.

from glob import glob
for filename in glob('*.txt'):
    print(filename)

27. The csv Module for Reading and Writing CSV Files

Python’s built-in csv module makes it easy to read and write CSV files.

import csv
with open('file.csv', mode='r') as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)

28. The json Module for JSON

Easily encode and decode JSON with the json module.

import json
json_string = json.dumps([1, 'simple', 'list'])
print(json.loads(json_string))

29. Memory Management with gc

Understanding Python’s garbage collection (gc) can help in managing memory in larger applications.

import gc
gc.collect()  # Explicitly trigger garbage collection

30. The functools Module

functools provides higher-order functions and operations on callable objects, such as partial for partial function application and lru_cache for memoization.

from functools import lru_cache

@lru_cache(maxsize=None)
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)

31. Context Managers for Resource Management

Create your own context managers using the contextlib module or by defining a class with __enter__ and __exit__ methods.

from contextlib import contextmanager

@contextmanager
def managed_resource(*args):
    # Setup
    resource = acquire_resource(*args)
    try:
        yield resource
    finally:
        # Cleanup
        release_resource(resource)

32. Using slice Objects for Readability

slice objects can make your slicing operations more readable.

my_slice = slice(0, 5)  # Equivalent to [0:5]
print(my_list[my_slice])

33. The operator Module for Functional Programming

The operator module provides function equivalents for arithmetic operations, comparison operations, and other fundamental Python operators, facilitating functional programming styles.

import operator
result = operator.add(1, 2)  # Instead of 1 + 2

34. Using asyncio for Asynchronous Programming

asyncio provides a framework for writing single-threaded concurrent code using coroutines.

import asyncio

async def main():
    print('Hello')
    await asyncio.sleep(1)
    print('world!')

asyncio.run(main())

35. Advanced String Formatting

Leverage Python’s advanced string formatting features for more control over text representation.

name = "John"
formatted = f"Hello, {name.upper()}!"
print(formatted)

36. The decimal Module for Precise Arithmetic

Use the decimal module for more accurate decimal arithmetic, useful in financial applications.

from decimal import Decimal
result = Decimal('0.1') + Decimal('0.2')
print(result)  # '0.3', not 0.30000000000000004

37. The unittest Framework for Testing

The unittest module provides a way to test your Python code, ensuring it works as expected.

import unittest

class TestSum(unittest.TestCase):
    def test_sum(self):
        self.assertEqual(sum([1, 2, 3]), 6, "Should be 6")

if __name__ == '__main__':
    unittest.main()

38. The datetime Module for Working with Dates and Times

Handling date and time is made easy with the datetime module.

from datetime import datetime
now = datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S"))

39. Using Type Hints

Type hints help in making your code more readable and allowing for better static analysis.

def greet(name: str) -> str:
    return f"Hello, {name}"

40. Exploiting Python’s Dynamic Nature

Python’s dynamic nature allows for metaprogramming and dynamic attribute access, which can be powerful in the right hands.

class MyClass:
    pass

obj = MyClass()
obj.new_attribute = "Dynamic value"
print(obj.new_attribute)

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply