20 Python Tricks You Should Know

20 More Python Tricks You Should Know

Python’s simplicity is one of its key strengths, and there are numerous techniques you can use to make your code more efficient, readable, and elegant. In this blog, we’re going to explore 20 more Python tricks that you may not know but will surely enhance your programming experience. These tricks avoid repeating those covered in our first list and will open up new possibilities for improving your Python skills.


 

1. Using dict.get() for Safe Dictionary Access

The dict.get() method allows you to access dictionary keys without raising a KeyError if the key doesn’t exist.

Example:

data = {'name': 'Alice', 'age': 30}
print(data.get('name'))  # Output: Alice
print(data.get('address', 'Not Found'))  # Output: Not Found

 

2. Using setdefault() for Default Dictionary Values

The setdefault() method returns the value if the key exists in the dictionary, and if not, it inserts the key with a default value.

Example:

data = {'name': 'Alice'}
data.setdefault('age', 30)
print(data)  # Output: {'name': 'Alice', 'age': 30}

 

3. Using collections.deque for Fast Appends

deque from the collections module provides an optimized list for appending and popping from both ends.

Example:

from collections import deque
dq = deque([1, 2, 3])
dq.append(4)
dq.appendleft(0)
print(dq)  # Output: deque([0, 1, 2, 3, 4])

 

4. Merging Dictionaries with **

You can merge two dictionaries using the ** unpacking operator.

Example:

dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
merged_dict = {**dict1, **dict2}
print(merged_dict)  # Output: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

 

5. Using sorted() with a Custom Key Function

You can sort iterables by a custom key function, which allows for more complex sorting.

Example:

students = [('Alice', 90), ('Bob', 80), ('Charlie', 85)]
sorted_students = sorted(students, key=lambda x: x[1])
print(sorted_students)  # Output: [('Bob', 80), ('Charlie', 85), ('Alice', 90)]

 

6. Using reversed() to Reverse an Iterable

reversed() returns a reverse iterator for an iterable, so you can traverse it in reverse order.

Example:

numbers = [1, 2, 3, 4]
reversed_numbers = list(reversed(numbers))
print(reversed_numbers)  # Output: [4, 3, 2, 1]

 

7. Using id() to Check Object Identity

The id() function returns the identity of an object. This can be useful when you want to check whether two variables point to the same object in memory.

Example:

x = [1, 2, 3]
y = x
print(id(x) == id(y))  # Output: True

 

8. Using itertools.cycle() for Infinite Iteration

The itertools.cycle() function creates an infinite iterator by cycling through an iterable endlessly.

Example:

import itertools
counter = itertools.cycle([1, 2, 3])
for i in range(6):
    print(next(counter))  # Output: 1 2 3 1 2 3

 

9. Using all() with Generator Expressions

You can combine all() with a generator expression for quick checks on whether all elements meet a certain condition.

Example:

numbers = [2, 4, 6, 8]
print(all(x % 2 == 0 for x in numbers))  # Output: True

 

10. Using *args and **kwargs for Flexible Function Arguments

*args allows you to pass a variable number of positional arguments, while **kwargs allows you to pass a variable number of keyword arguments.

Example:

def display_info(name, *args, **kwargs):
    print(f"Name: {name}")
    print(f"Additional Info: {args}")
    print(f"Keyword Info: {kwargs}")

display_info("Alice", 30, "Engineer", city="New York")

 

11. Using any() with Generator Expressions

The any() function checks if any element in an iterable is true. Combine it with generator expressions for more elegant checks.

Example:

numbers = [0, 1, 0, 2]
print(any(x > 1 for x in numbers))  # Output: True

 

12. Using functools.partial() for Partial Functions

functools.partial() lets you create a new function by fixing a certain number of arguments of the original function.

Example:

from functools import partial
def multiply(x, y):
    return x * y

double = partial(multiply, 2)
print(double(5))  # Output: 10

 

13. Using globals() and locals() for Variable Access

globals() and locals() allow you to access global and local variables, respectively, as dictionaries.

Example:

x = 10
print(globals()['x'])  # Output: 10

 

14. Using str.format() for String Formatting

Python’s str.format() method allows you to insert variables into a string, providing a flexible way to format strings.

Example:

name = "Alice"
age = 25
greeting = "My name is {} and I am {} years old.".format(name, age)
print(greeting)  # Output: My name is Alice and I am 25 years old.

 

15. Using classmethod and staticmethod

You can define methods that belong to the class itself (classmethod) or don’t require an instance (staticmethod).

Example:

class MyClass:
    @classmethod
    def class_method(cls):
        print("This is a class method.")

    @staticmethod
    def static_method():
        print("This is a static method.")

MyClass.class_method()  # Output: This is a class method.
MyClass.static_method()  # Output: This is a static method.

 

16. Using __slots__ for Memory Optimization

The __slots__ attribute allows you to limit the attributes a class can have, saving memory.

Example:

class Point:
    __slots__ = ['x', 'y']
    def __init__(self, x, y):
        self.x = x
        self.y = y

p = Point(10, 20)
print(p.x, p.y)  # Output: 10 20

 

17. Using os.path.join() for File Paths

The os.path.join() function is a cross-platform way to join paths, ensuring they work on any operating system.

Example:

import os
path = os.path.join('folder', 'file.txt')
print(path)  # Output: folder/file.txt (on Unix-like systems)

 

18. Using time.sleep() for Delays

If you need to add a delay in your program (e.g., for simulations or pauses), time.sleep() is your friend.

Example:

import time
print("Start")
time.sleep(2)
print("End")  # "End" will be printed after a 2-second delay

 

19. Using map() for Applying Functions

The map() function allows you to apply a function to all items in an iterable.

Example:

numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)  # Output: [1, 4, 9, 16]

 

20. Using math Module for Advanced Math

Python’s math module provides a lot of useful functions for advanced mathematical operations.

Example:

import math
print(math.sqrt(16))  # Output: 4.0
print(math.factorial(5))  # Output: 120

 

Conclusion

With these 20 additional Python tricks, you now have even more tools in your programming toolbox. From enhancing dictionary handling to optimizing memory usage with __slots__, these techniques will help you streamline your code and increase your productivity. Keep experimenting with these tricks, and don't forget to share your own Python tips with others!

Which of these tricks will you implement in your next project? Let me know in the comments!


Post a Comment

0 Comments