# What is the difference between str and repr in Python?

In Python, **`str`** is used to represent a string in a more readable format, while **`repr`** is used to represent a string in an unambiguous and official format. The main difference between the two is that **`str`** is meant to be more user-friendly, while **`repr`** is meant to be more machine-friendly.

For example, consider the following code:

```python
s = 'Hello, world!'

print(str(s))
print(repr(s))
```

This will output the following:

```python
Hello, world!
'Hello, world!'
```

As you can see, the output of **`str(s)`** is more readable, while the output of **`repr(s)`** includes quotes around the string to make it clear that it is a string.

In general, you should use **`str`** when you want to display a string to the user, and **`repr`** when you want to represent a string in a way that can be used to recreate the original object, such as in a debugger or when logging the state of an object.