Question: I was working with f-strings, and I am fairly new to python. My question is does the f-string formatting cast a variable(an integer) into a string?

```
number = 10
print(f"{number} is not a string")

```

Is `number` cast into a string?

Answer: 
`f"..."` expressions *format* values to strings, integrate the result into a larger string and return that result. That's not quite the same as 'casting'\*.

`number` is an expression here, one that happens to produce an integer object. The integer is then formatted to a string, by calling the `__format__` method on that object, with the first argument, a string containing a *format specifier*, left empty:

```
>>> number = 10
>>> number.__format__('')
'10'

```

We'll get to the format specifier later.

The original integer object, `10`, didn't change here, it remains an integer, and `.__format__()` just returned a new object, a string:

```
>>> f"{number} is not a string"
'10 is not a string'
>>> number
10
>>> type(number)
10

```

There are more options available to influence the output by adding a format specifier to the `{...}` placeholder, after a `:`. You can see what exact options you have by reading the [Format Specification Mini Language documentation](https://docs.python.org/3/library/string.html#formatspec); this documents what the Python standard types might expect as format specifiers.

For example, you could specify that the number should be left-aligned in a string that's at least 5 characters wide, with the specifier `<5`:

```
>>> f"Align the number between brackets: [{number:<5}]"
'Align the number between brackets: [10   ]'

```

The `{number:<5}` part tells Python to take the output of `number.__format__("<5")` and use that as the string value to combine with the rest of the string, in between the `[` and `]` parts.

This still doesn't change what the `number` variable references, however.

---

\*: In technical terms, *casting* means *changing the type of a variable*. This is not something you do in Python because Python variables *don't have a type*. Python variables are references to objects, and in Python it is those objects that have a type. You can change what a variable references, e.g. `number = str(number)` would replace the integer with a string object, but that's not casting either.
If u can't understand f string or other soln dosent make any sense then try this.
This will help you integrate a variable(integer/char) in a string.

```
a = "blah blah blah {} blah blah ".format(integer_value)
print(a)

```