Data Type Conversion and Type Checking
Curly braces do not mean that the variable itself is stored inside the resulting string. They mark the expression whose value is used while the f-string is evaluated.
The Value Before Formatting
An f-string is a string literal prefixed with f. It can contain expressions inside curly braces. When Python evaluates the f-string, the expressions contribute their values to the resulting string. The important distinction is that the original variable can hold an integer while the completed f-string is a string.
In this example, score is assigned the raw value 7. The expression inside the curly braces uses that value while the f-string is evaluated. The result assigned to message is the string containing the text Score: followed by the string representation of 7.
Reading the F-String Structure
An f-string has two important parts. The literal text is written normally inside the quotation marks. An embedded expression is written between curly braces. Prefixing the string with f tells Python to evaluate the expressions inside those braces and include their results in the string.
Curly braces do not mean that the variable itself is stored inside the resulting string. They mark the expression whose value is used while the f-string is evaluated.
One Evaluation Moment
A Variable and Its Formatted Result
Trace the values after an integer is placed in an f-string and the original variable is then changed.
- 1Assign the original value
score is assigned the integer value 7.
- 2Evaluate the f-string
The expression inside the braces uses the current value of score. The completed result is the string Score: 7.
- 3Change the variable
score is then assigned the integer value 10. This later assignment does not change the f-string result that was already created.
score holds 10, while message still contains the string Score: 7.
score: 10
message: Score: 7Tracing a Debugging Problem
When an f-string does not seem to show the value you expect, trace it in order. First identify the value held by each variable. Next inspect the expression inside each pair of curly braces. Finally, identify the complete string produced when the f-string is evaluated. This separates the original value from its string representation.
The final assignment changes items, but it does not revise label. The f-string already produced its result when label was assigned. Therefore, the integer value later stored in items and the string already stored in label are different results at different points in the program.
Mistakes Beginners Make
Common mistake Treating the f-string result as if it were still the original integer.
What it looks likescore = 7 followed by message = f"Score: {score}"Why it failsThe original variable holds an integer, but the result of the f-string is always a string.
Do this insteadTrack score and message separately: score is the raw integer value, while message is the completed string.
Common mistake Expecting an already-created f-string result to change when its variable changes.
What it looks likemessage = f"Score: {score}" followed later by score = 10Why it failsF-strings are evaluated once and do not create a live connection to the variables used inside them.
Do this insteadEvaluate a new f-string when a newly updated string result is needed.
Common mistake Reading the curly-braced expression as stored variable content inside the final string.
What it looks likef"Items remaining: {items}"Why it failsThe braces identify an expression to evaluate; the final result contains the string representation of that expression's value.
Do this insteadSeparate the variable's current value from the complete string produced by the f-string.
For a type-checking trace, write down two observations separately: the raw value and type held by the variable before formatting, and the string value and type produced by the f-string afterward. This prevents the formatted text from being confused with the original value.
Practice the Trace
Trace the following statements. Identify the integer value held by count when the f-string is evaluated, identify the string assigned to summary, and state whether changing count afterward changes summary.
count = 4
summary = f"Count: {count}"
count = 9Hints
- Start with the value assigned to count before summary is created.
- Read the literal text and the expression inside the curly braces separately.
- Remember that the f-string result is evaluated once.
What do you think happens?
After the three statements run, what does summary contain?
Reveal answer
Count: 4
The f-string is evaluated while count is 4. The later assignment changes count but does not change the string result already stored in summary.
Key Takeaways
- 1An f-string is a string literal prefixed with f, with expressions placed inside curly braces.
- 2The expression inside an f-string can use a variable's value when the f-string is evaluated.
- 3The result of an f-string is always a string, even when an embedded expression uses an integer.
- 4The original variable and the string result should be traced as separate values and types.
- 5F-strings are evaluated once, so later variable changes do not alter an already-created result.
At a glance
- An f-string combines literal text with evaluated expressions inside curly braces.
- An integer variable remains an integer, while the completed f-string is a string representation.
- F-strings capture values at one evaluation moment rather than maintaining a live link to variables.
- Debugging is easier when you trace the original variable, the embedded expression, and the final string separately.