Python – Định dạng string bằng f-string

Bài hướng dẫn này chỉ ra cách định dạng chuỗi trong Python bằng f-string.

Python f-string

Python f-string là cú pháp Python mới nhất để thực hiện định dạng chuỗi. f-string được support từ Python 3.6. f-string cung cấp cách định dạng chuỗi nhanh hơn, dễ đọc hơn, ngắn gọn hơn và ít mắc lỗi hơn trong Python.

f-string có tiền tố f và sử dụng dấu ngoặc {} để đánh giá giá trị.

Định dạng string

Ví dụ sau tổng hợp các cách định dạng string trong Python
formatting_strings.py

name = 'Peter'
age = 23

print('%s is %d years old' % (name, age))
print('{} is {} years old'.format(name, age))
print(f'{name} is {age} years old')

Trong ví dụ, chúng ta định dạng string với 2 biến name và age.

print('%s is %d years old' % (name, age))

Đây là cách định dạng chuỗi cũ trong Python, sử dụng toán tử % và định dạng chuỗi classic chỉ định như %s và %d.

print('{} is {} years old'.format(name, age))

Kể từ Python 3.0, hàm format () đã được giới thiệu để cung cấp các tùy chọn định dạng nâng cao.

print(f'{name} is {age} years old')

f-string được support từ Python 3.6, f-string có tiền tố f và sử dụng dấu ngoặc {} để đánh giá giá trị.

C:\Programs\Python\Python37>python.exe formatting_strings.py
Peter is 23 years old
Peter is 23 years old
Peter is 23 years old

Kết quả cả 3 cách định dạng string đều cho kết quả giống nhau.

Biểu thức f-string

Chúng ta add biểu thức trong ngoặc {}
expressions.py

bags = 3
apples_in_bag = 12

print(f'There are total of {bags * apples_in_bag} apples')

Biểu thức bags*apples_in_bag được đặt trong ngoặc {}
Kết quả:

C:\Programs\Python\Python37>python.exe expressions.py
There are total of 36 apples

f-string dictionaries

Chúng ta có thể sử dụng dictionary trong f-string
dicts.py

user = {'name': 'John Doe', 'occupation': 'gardener'}

print(f"{user['name']} is a {user['occupation']}")

Ví dụ này đánh giá dictionary trong f-string
Kết quả:

C:\Programs\Python\Python37>python.exe dicts.py
John Doe is a gardener

f-string debug

Kể từ version Python 3.8 support tự đánh giá giá trị biểu thức bằng toán tử =
debug.py

import math

x = 0.8

print(f'{math.cos(x) = }')
print(f'{math.sin(x) = }')

Ví dụ hiển thị giá trị hàm cos và sin ở mode debug.
Kết quả:

C:\Programs\Python\Python38-32>python.exe debug.py
math.cos(x) = 0.6967067093471654
math.sin(x) = 0.7173560908995228

f-string multiline

Chúng ta có thể làm việc với multi string
multiline.py

name = 'John Doe'
age = 32
occupation = 'gardener'

msg = (
    f'Name: {name}\n'
    f'Age: {age}\n'
    f'Occupation: {occupation}'
)

print(msg)

Ví dụ minh họa định dạng string nhiều dòng. f-string được đặt giữa ngoặc (); mỗi string được đi kèm kí tự f.
Kết quả script multiline.py

C:\Programs\Python\Python37>python.exe multiline.py
Name: John Doe
Age: 32
Occupation: gardener

f-string gọi hàm

Chúng ta có thể gọi hàm trong f-string
call_function.py

def mymax(x, y):

    return x if x > y else y

a = 3
b = 4

print(f'Max of {a} and {b} is {mymax(a, b)}')

Ví dụ minh họa cách gọi hàm trong f-string
Kết quả

C:\Programs\Python\Python37>python.exe call_function.py
Max of 3 and 4 is 4

f-string object

f-string chấp nhận object; các object phải có hoặc là __str__() hoặc __repr__()
objects.py

class User:
    def __init__(self, name, occupation):
        self.name = name
        self.occupation = occupation

    def __repr__(self):
        return f"{self.name} is a {self.occupation}"

u = User('John Doe', 'gardener')

print(f'{u}')

Ví dụ đánh giá object trong f-string
Kết quả

C:\Programs\Python\Python37>python.exe objects.py
John Doe is a gardener

f-string kí tự escape

Ví dụ sau minh họa cách add thêm kí tự escape trong f-string
escaping.py

print(f'Python uses {{}} to evaludate variables in f-strings')
print(f'This was a \'great\' film')

Để thêm kí tự {}, chúng ta double kí tự đó. Để thêm kí tự nháy đơn ‘, chúng ta thêm kí tự \ đi kèm kí tự ‘
Kết quả

C:\Programs\Python\Python37>python.exe escaping.py
Python uses {} to evaludate variables in f-strings
This was a 'great' film

f-string định dạng date time

Ví dụ sau minh họa định dạng date time
format_datetime.py

import datetime

now = datetime.datetime.now()

print(f'{now:%Y-%m-%d %H:%M}')

Hiển thị thời gian hiện tại trên PC. Kết quả như sau:

C:\Programs\Python\Python37>python.exe format_datetime.py
2020-08-30 20:23

f-string định dạng float

Giá trị dấu phẩy động có hậu tố f. Chúng tôi cũng có thể chỉ định độ chính xác: số chữ số thập phân. Độ chính xác là một giá trị nằm ngay sau ký tự dấu chấm.
format_floats.py

val = 12.3

print(f'{val:.2f}')
print(f'{val:.5f}')

Ví dụ in ra định dạng dấu phẩy động. Kết quả in ra số phẩy động với độ chính xác lần lượt 2 và 5 chữ số ở phần thập phân.

C:\Programs\Python\Python37>python.exe format_floats.py
12.30
12.30000

f-string định dạng độ rộng

f-string có thể fill space hoặc giá trị khác nếu số lượng kí tự ít hơn độ rộng chỉ định. Xem ví dụ sau
format_width.py

for x in range(1, 11):
    print(f'{x:02} {x*x:3} {x*x*x:4}')

Ví dụ in ra ba cột. Mỗi cột có chiều rộng được xác định trước.
– x:02 có nghĩa là độ rộng là 2 kí tự, nếu số ít hơn 2 kí tự, thêm 0 vào trước.
– x*x*:3 có nghĩa là in ra giá trị x*x và độ rộng là 3 kí tự, nếu x*x ít hơn 3 kí tự, thêm space vào trước
– x*x*x:4 có nghĩa là in ra giá trị x*x*x và độ rộng là 4 kí tự, nếu x*x*x ít hơn 4 kí tự, thêm space vào trước

Kết quả

C:\Programs\Python\Python37>python.exe format_width.py
01   1    1
02   4    8
03   9   27
04  16   64
05  25  125
06  36  216
07  49  343
08  64  512
09  81  729
10 100 1000

f-string căn lề

Theo mặc định, các chuỗi được căn bên trái. Chúng ta có thể sử dụng ký tự> để căn các chuỗi ở bên phải. Ký tự> theo sau ký tự dấu hai chấm.
justify.py

s1 = 'a'
s2 = 'ab'
s3 = 'abc'
s4 = 'abcd'

print(f'{s1:>10}')
print(f'{s2:>10}')
print(f'{s3:>10}')
print(f'{s4:>10}')

Chúng tôi có bốn chuỗi có độ dài khác nhau. Chúng tôi đặt chiều rộng của đầu ra là 10 ký tự. Các giá trị được căn lề bên phải.
Kết quả:

C:\Programs\Python\Python37>python.exe justify.py
         a
        ab
       abc
      abcd

f-string biểu diễn số

Có thể biểu diễn số dưới dạng: cơ số 10, octo (cơ số 8), hexa (cơ số 16),…
format_notations.py

a = 300

# hexadecimal
print(f"{a:x}")

# octal
print(f"{a:o}")

# scientific
print(f"{a:e}")

Ví dụ in một giá trị với 3 cơ số

C:\Programs\Python\Python37>python.exe format_notations.py
12c
454
3.000000e+02

Be the first to comment

Leave a Reply