Python - Top 25 interview questions

Sure! Here are the top 25 interview questions for Python, along with detailed answers and relevant examples.

1. What are Python’s key features?

Answer:
Python is known for its simplicity and readability, making it a popular choice for both beginners and experienced developers. Key features include:

  • Easy to Learn and Use: Python's syntax is clear and intuitive.
  • Interpreted Language: Python code is executed line by line, which makes debugging easier.
  • Dynamic Typing: Types are determined at runtime, not in advance.
  • Expressive Language: Python allows complex operations to be expressed concisely.
  • Extensive Standard Library: Python has a rich set of modules and libraries to handle various tasks.
  • Portability: Python can run on different operating systems with minimal changes.
  • Open Source: Python is free to use and distribute, even for commercial purposes.

2. Explain the difference between a list and a tuple in Python.

Answer:

  • List: Mutable, meaning elements can be changed, added, or removed.
code
my_list = [1, 2, 3]
  my_list[0] = 4  # [4, 2, 3]
  my_list.append(5)  # [4, 2, 3, 5]
  • Tuple: Immutable, meaning once defined, elements cannot be changed, added, or removed.
code
my_tuple = (1, 2, 3)
  # my_tuple[0] = 4  # Raises a TypeError

3. How does Python handle memory management?

Answer:
Python uses automatic memory management, which includes:

  • Reference Counting: Each object maintains a count of references pointing to it. When the count reaches zero, the memory is deallocated.
  • Garbage Collection: Python's garbage collector (gc) removes objects that are no longer referenced to free up memory. It handles cyclic references (objects referring to each other) which reference counting alone can't resolve.

4. What is a Python decorator and how is it used?

Answer:
A decorator is a function that adds functionality to another function or method without modifying its structure.

code
def my_decorator(func):
    def wrapper():
        print("Something before the function.")
        func()
        print("Something after the function.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

# Output:

# Something before the function.

# Hello!

# Something after the function.

5. Explain the difference between *args and **kwargs.

Answer:

  • *args: Allows a function to accept any number of positional arguments.
code
def func(*args):
      for arg in args:
          print(arg)

  func(1, 2, 3)
  # Output:
  # 1
  # 2
  # 3
  • **kwargs: Allows a function to accept any number of keyword arguments.
code
def func(**kwargs):
      for key, value in kwargs.items():
          print(f"{key}: {value}")

  func(name="Alice", age=30)
  # Output:
  # name: Alice
  # age: 30

6. What are Python’s built-in data types?

Answer:
Python has several built-in data types:

  • Numeric Types: int, float, complex
code
a = 10      # int
  b = 3.14    # float
  c = 1 + 2j  # complex
  • Sequence Types: list, tuple, range
code
my_list = [1, 2, 3]  # list
  my_tuple = (1, 2, 3) # tuple
  my_range = range(5)  # range
  • Mapping Type: dict
code
my_dict = {"key": "value"}
  • Set Types: set, frozenset
code
my_set = {1, 2, 3}        # set
  my_frozenset = frozenset([1, 2, 3])
  • Text Type: str
code
my_str = "Hello"
  • Boolean Type: bool
code
my_bool = True
  • Binary Types: bytes, bytearray, memoryview
code
my_bytes = b"Hello"          # bytes
  my_bytearray = bytearray(5)  # bytearray
  my_memoryview = memoryview(my_bytes)

7. What is the difference between __str__ and __repr__ methods?

Answer:

  • __str__: Returns a string representation of the object, intended to be readable.
code
class MyClass:
      def __str__(self):
          return "This is a user-friendly string representation."

  obj = MyClass()
  print(str(obj))  # Output: This is a user-friendly string representation.
  • __repr__: Returns an unambiguous string representation of the object, intended for debugging and development.
code
class MyClass:
      def __repr__(self):
          return "MyClass()"

  obj = MyClass()
  print(repr(obj))  # Output: MyClass()

8. How do you handle exceptions in Python?

Answer:
Exceptions in Python are handled using try, except, else, and finally blocks.

code
try:
    # Code that may raise an exception
    result = 10 / 0
except ZeroDivisionError:
    print("Cannot divide by zero.")
else:
    print("No exceptions occurred.")
finally:
    print("This block always executes.")

9. What is a lambda function?

Answer:
A lambda function is an anonymous function defined with the lambda keyword. It can have any number of parameters but only one expression.

code
add = lambda x, y: x + y
print(add(2, 3))  # Output: 5

10. Explain list comprehensions and provide an example.

Answer:
List comprehensions provide a concise way to create lists. They consist of brackets containing an expression followed by a for clause.

code
squares = [x**2 for x in range(10)]
print(squares)  # Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

11. What are generators in Python?

Answer:
Generators are functions that return an iterable set of items, one at a time, in a special way using the yield statement.

code
def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()
for value in gen:
    print(value)

# Output:

# 1

# 2

# 3

12. What is the difference between deepcopy and copy?

Answer:

  • copy: Creates a shallow copy of an object. Only the top-level objects are duplicated.
code
import copy
  original = [1, 2, [3, 4]]
  shallow_copy = copy.copy(original)
  shallow_copy[2][0] = 5
  print(original)  # Output: [1, 2, [5, 4]]
  • deepcopy: Creates a deep copy of an object. All levels of the objects are duplicated.
code
deep_copy = copy.deepcopy(original)
  deep_copy[2][0] = 6
  print(original)  # Output: [1, 2, [5, 4]]

13. How do you handle file operations in Python?

Answer:
File operations are handled using the open function and the context manager to ensure proper resource management.

code
with open('example.txt', 'r') as file:
    content = file.read()
    print(content)

with open('example.txt', 'w') as file:
    file.write("Hello, World!")

14. What is the Global Interpreter Lock (GIL)?

Answer:
The GIL is a mutex that protects access to Python objects, preventing multiple native threads from executing Python bytecodes simultaneously. This means that Python threads are not truly concurrent, making multi-threading less effective for CPU-bound tasks but still useful for I/O-bound tasks.

15. Explain the use of the with statement in Python.

Answer:
The with statement simplifies exception handling and ensures that cleanup code is executed. It's often used with file operations.

code
with open('example.txt', 'r') as file:
    content = file.read()
    print(content)

# The file is automatically closed after the block.

16. What are Python's built-in types for sequences?

Answer:
Python has several built-in types for sequences, including:

  • List: Mutable, ordered sequence of elements.
code
my_list = [1, 2, 3]

17. What is a metaclass in Python?

Answer:
A metaclass is a class of a class that defines how a class behaves. A class is an instance of a metaclass. Metaclasses allow you to intercept class creation, modify class definitions, and customize class behavior.

code
class Meta(type):
    def __new__(cls, name, bases, dct):
        print(f'Creating class {name}')
        return super().__new__(cls, name, bases, dct)

class MyClass(metaclass=Meta):
    pass


# Output:

# Creating class MyClass

18. How can you handle multiple exceptions in a single except block?

Answer:
You can handle multiple exceptions by specifying a tuple of exception types in the except block.

code
try:
    # Code that may raise different exceptions
    result = 10 / 0
except (ZeroDivisionError, TypeError) as e:
    print(f"An error occurred: {e}")

19. What are Python's built-in types for sets?

Answer:
Python has two built-in types for sets:

  • Set: An unordered collection of unique elements.
code
my_set = {1, 2, 3}
  • Frozenset: An immutable version of a set.
code
my_frozenset = frozenset([1, 2, 3])

20. How does Python implement multithreading?

Answer:
Python implements multithreading using the threading module. However, due to the Global Interpreter Lock (GIL), true parallelism is not achieved in CPU-bound tasks. Multithreading is useful for I/O-bound tasks.

code
import threading

def print_numbers():
    for i in range(5):
        print(i)

thread = threading.Thread(target=print_numbers)
thread.start()
thread.join()

21. What is the difference between is and == in Python?

Answer:

  • is: Checks if two references point to the same object (identity).
code
a = [1, 2, 3]
  b = a
  print(a is b)  # Output: True
  • ==: Checks if the values of two objects are equal (equality).
code
c = [1, 2, 3]
  d = [1, 2, 3]
  print(c == d)  # Output: True
  print(c is d)  # Output: False

22. What is the use of the map() function in Python?

Answer:
The map() function applies a given function to all items in an iterable and returns a map object (which is an iterator).

code
def square(x):
    return x * x

numbers = [1, 2, 3, 4]
squared_numbers = map(square, numbers)
print(list(squared_numbers))  # Output: [1, 4, 9, 16]

23. How do you create a virtual environment in Python?

Answer:
You can create a virtual environment using the venv module in Python.

code
python -m venv myenv

To activate the virtual environment:

  • On Windows:
code
myenv\Scripts\activate
  • On macOS/Linux:
code
source myenv/bin/activate

24. What are list comprehensions and how do they work?

Answer:
List comprehensions provide a concise way to create lists using an expression inside square brackets.

code
squares = [x**2 for x in range(10)]
print(squares)  # Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

List comprehensions can include conditions to filter elements.

code
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)  # Output: [0, 4, 16, 36, 64]

25. What are the different ways to read a file in Python?

Answer:
You can read a file in Python using various methods:

  • Read the entire file:
code
with open('example.txt', 'r') as file:
      content = file.read()
      print(content)
  • Read file line by line:
code
with open('example.txt', 'r') as file:
      for line in file:
          print(line, end='')
  • Read file into a list:
code
with open('example.txt', 'r') as file:
      lines = file.readlines()
      print(lines)

These questions and answers should give a comprehensive understanding of Python, suitable for a variety of interview contexts.