Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Replace older formatting methods with f-strings
  • Loading branch information
tusharkhatriofficial committed Sep 17, 2022
commit 350b11f1f7ad6f616bc886cb0bb3daccf7850d13
69 changes: 4 additions & 65 deletions basics/handy-stuff-strings.md
Original file line number Diff line number Diff line change
Expand Up @@ -241,80 +241,19 @@ Instead it's recommended to use string formatting. It means putting
other things in the middle of a string.

Python has multiple ways to format strings. One is not necessarily
better than others, they are just different. Here's a few ways to solve
better than others, they are just different. Here's a way to solve
our problem:
Comment thread
tusharkhatriofficial marked this conversation as resolved.
Outdated

- `.format()`-formatting, also known as new-style formatting. This
formatting style has a lot of features, but it's a little bit more
typing than `%s`-formatting.

```python
>>> "Hello {}.".format(name)
'Hello Akuli.'
>>> "My name is {} and I'm on the {} channel on {}.".format(name, channel, network)
"My name is Akuli and I'm on the ##learnpython channel on freenode."
>>>
```

- `%s`-formatting, also known as old-style formatting. This has less
features than `.format()`-formatting, but `'Hello %s.' % name` is
shorter and faster to type than `'Hello {}.'.format(name)`. I like
to use `%s` formatting for simple things and `.format` when I need
more powerful features.

```python
>>> "Hello %s." % name
'Hello Akuli.'
>>> "My name is %s and I'm on the %s channel on %s." % (name, channel, network)
"My name is Akuli and I'm on the ##learnpython channel on freenode."
>>>
```

In the second example we had `(name, channel, network)` on the right
side of the `%` sign. It was a tuple, and we'll talk more about them
[later](lists-and-tuples.md#tuples).

If we have a variable that may be a tuple we need to wrap it in another
tuple when formatting:

```python
>>> thestuff = (1, 2, 3)
>>> "we have %s" % thestuff
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
>>> "we have %s and %s" % ("hello", thestuff)
'we have hello and (1, 2, 3)'
>>> "we have %s" % (thestuff,)
'we have (1, 2, 3)'
>>>
```

Here `(thestuff,)` was a tuple that contained nothing but `thestuff`.

- f-strings are even less typing, but new in Python 3.6. **Use this only if
- F-strings is a new formatting mechanism and was introduced in Python 3.6. **Use this only if
Comment thread
tusharkhatriofficial marked this conversation as resolved.
Outdated
you know that nobody will need to run your code on Python versions older
than 3.6.** Here the f is short for "format", and the content of the
string is same as it would be with `.format()` but we can use variables
directly.

than 3.6.** Here the `f` is short for "format". f-string is just a string prefixed with `f`.
```python
Comment thread
tusharkhatriofficial marked this conversation as resolved.
Outdated
>>> f"My name is {name} and I'm on the {channel} channel on {network}."
"My name is Akuli and I'm on the ##learnpython channel on freenode."
>>>
```

All of these formatting styles have many other features also:

```python
>>> 'Three zeros and number one: {:04d}'.format(1)
'Three zeros and number one: 0001'
>>> 'Three zeros and number one: %04d' % 1
'Three zeros and number one: 0001'
>>>
```

If you need to know more about formatting I recommend reading
If you need to know more about older formatting methods I recommend reading
[this](https://pyformat.info/).
Comment thread
tusharkhatriofficial marked this conversation as resolved.
Outdated

## Other things
Expand Down