Print(f in Python)

Đến cuối bài viết này, bạn sẽ học cách làm thế nào và tại sao nên bắt đầu sử dụng f-strings ngay hôm nay

Nhưng trước hết ta sẽ xem phải định dạng chuỗi thế nào khi chưa có f-string

Định dạng chuỗi cũ trong Python

Trước Python 3. 6, bạn có hai cách chính để nhúng các biểu thức Python vào bên trong chuỗi ký tự để định dạng. %-formatting and 

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
6

Cun select #1. %-định dạng

This is OG of Python format and has been used in this language ngay từ đầu

Cách sử dụng %-formatting

Các chuỗi đối tượng có một hoạt động được đánh giá hợp nhất bằng cách sử dụng toán tử 

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
7 mà bạn có thể sử dụng để định dạng chuỗi. Đây là những gì trông giống như trong thực tế

>>> name = "Eric"
>>> "Hello, %s." % name
'Hello, Eric.'

To insert many variable you can do after

>>> name = "Eric"
>>> age = 74
>>> "Hello, %s. You are %s." % (name, age)
'Hello Eric. You are 74.'

Tại sao %-format không phải là tuyệt vời

Các ví dụ mà bạn thấy ở trên là đủ để đọc. Tuy nhiên, một khi bạn bắt đầu sử dụng một số tham số và chuỗi dài hơn, mã của bạn sẽ nhanh chóng trở nên khó đọc hơn nhiều. Mọi thứ bắt đầu có vẻ hơi lộn xộn rồi

>>> first_name = "Eric"
>>> last_name = "Idle"
>>> age = 74
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> "Hello, %s %s. You are %s. You are a %s. You were a member of %s." % (first_name, last_name, age, profession, affiliation)
'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.'

Thật không may, loại định dạng này không tuyệt vời vì nó có dòng dài và dẫn đến lỗi, chẳng hạn như không hiển thị bộ giá trị hoặc từ điển một cách chính xác. May mắn thay, có những ngày tươi sáng hơn phía trước. Ta xem tùy chọn #2 xem sao

Tùy chọn #2. str. định dạng()

Cách mới hơn này để hoàn thành công việc đã được giới thiệu trong Python 2. 6

Cách sử dụng str. định dạng()

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
6  is an process format %. Nó sử dụng cú pháp gọi hàm bình thường và có thể mở rộng thông qua phương thức 
>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
9 trên các đối tượng được chuyển đổi thành chuỗi

With 

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
6, các trường thay thế được đánh dấu bằng dấu ngoặc nhọn

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'

Bạn có thể tham khảo các biến theo bất kỳ thứ tự nào bằng cách tham chiếu chỉ mục của chúng

>>> "Hello, {1}. You are {0}.".format(age, name)
'Hello, Eric. You are 74.'

Nhưng nếu bạn thêm tên biến, bạn sẽ nhận được đặc quyền bổ sung là có thể truyền các đối tượng và sau đó tham chiếu các tham số và phương thức ở giữa các dấu ngoặc nhọn

>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, Eric. You are 74.'

Bạn cũng có thể sử dụng thủ thuật 

>>> "Hello, {1}. You are {0}.".format(age, name)
'Hello, Eric. You are 74.'
1 thu nhỏ điều này với từ điển

>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(**person)
'Hello, Eric. You are 74.'

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
6 chắc chắn là một bản nâng cấp khi so sánh với %-formatting, nhưng nó có những điều chưa ổn

in sao str. format() không ổn định

Sử dụng mã 

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
6 dễ đọc hơn nhiều so với mã sử dụng %-format, nhưng 
>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
6 vẫn có thể khá dài khi bạn xử lý nhiều tham số và chuỗi dài hơn

>>> first_name = "Eric"
>>> last_name = "Idle"
>>> age = 74
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> print(("Hello, {first_name} {last_name}. You are {age}. " + 
>>>        "You are a {profession}. You were a member of {affiliation}.") \
>>>        .format(first_name=first_name, last_name=last_name, age=age, \
>>>                profession=profession, affiliation=affiliation))
'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.'

Nếu bạn có các biến mà bạn muốn chuyển đến 

>>> "Hello, {1}. You are {0}.".format(age, name)
'Hello, Eric. You are 74.'
5 trong từ điển, thì bạn có thể giải nén nó với 
>>> "Hello, {1}. You are {0}.".format(age, name)
'Hello, Eric. You are 74.'
6 và tham chiếu các giá trị bằng từ khóa trong chuỗi, nhưng phải có một cách tốt hơn để làm điều này

chuỗi f. Một cách mới và cải tiến để định dạng chuỗi trong Python

chuỗi f được xuất đề từ phiên bản Python 3. 6. Bạn có thể đọc tất cả về nó trong PEP 498, được viết bởi Eric V. Smith vào tháng 8 năm 2015

Còn được gọi là "các chuỗi ký tự được định dạng", f-string là các chuỗi ký tự có một ký tự 

>>> "Hello, {1}. You are {0}.".format(age, name)
'Hello, Eric. You are 74.'
7 ở đầu nhấp nháy và dấu ngoặc kép chứa các biểu thức sẽ được thay thế bằng các giá trị của chúng. Các biểu thức được đánh giá trong thời gian chạy và sau đó được định dạng bằng giao thức
>>> "Hello, {1}. You are {0}.".format(age, name)
'Hello, Eric. You are 74.'
8. Như mọi khi,  là người bạn của bạn khi bạn muốn tìm hiểu thêm

Dưới đây là một số cách f-string có thể giúp cuộc sống của bạn dễ dàng hơn

Cú pháp đơn giản

Cú pháp tương tự như cú pháp bạn đã sử dụng 

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
6 nhưng ít dài dòng hơn. Vui lòng xem nó dễ đọc như thế nào

>>> name = "Eric"
>>> age = 74
>>> f"Hello, {name}. You are {age}."
'Hello, Eric. You are 74.'

Nó cũng sẽ hợp lệ nếu bạn sử dụng một chữ cái viết hoa 

>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, Eric. You are 74.'
0

>>> F"Hello, {name}. You are {age}."
'Hello, Eric. You are 74.'

Bạn yêu f-string chưa? .

>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, Eric. You are 74.'
1

Tùy chọn biểu thức

Vì chuỗi f bị đánh giá trong thời gian chạy, bạn có thể đặt bất kỳ và tất cả các biểu thức Python hợp lệ bất kỳ vào chúng. Điều khoản này cho phép bạn thực hiện một số công việc thuận lợi

Bạn có thể làm điều gì đó khá đơn giản, như thế này

>>> name = "Eric"
>>> age = 74
>>> "Hello, %s. You are %s." % (name, age)
'Hello Eric. You are 74.'
0

Nhưng bạn cũng có thể gọi các hàm. This is a ví dụ

>>> name = "Eric"
>>> age = 74
>>> "Hello, %s. You are %s." % (name, age)
'Hello Eric. You are 74.'
1

You also have the option call a method of direct

>>> name = "Eric"
>>> age = 74
>>> "Hello, %s. You are %s." % (name, age)
'Hello Eric. You are 74.'
2

Thậm chí bạn có thể sử dụng các đối tượng được tạo từ các lớp với f-string. Hãy tưởng tượng bạn có lớp sau

>>> name = "Eric"
>>> age = 74
>>> "Hello, %s. You are %s." % (name, age)
'Hello Eric. You are 74.'
3

You can do this thing

>>> name = "Eric"
>>> age = 74
>>> "Hello, %s. You are %s." % (name, age)
'Hello Eric. You are 74.'
4

Các phương thức __str__() và __repr__() xử lý cách các đối tượng được trình bày dưới dạng chuỗi, vì vậy bạn cần đảm bảo rằng bạn đã đưa vào ít nhất một trong các phương thức đó trong lớp định nghĩa của mình. Nếu bạn phải chọn một phương thức, hãy chọn 

>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, Eric. You are 74.'
2 vì nó có thể được sử dụng thay thế 
>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, Eric. You are 74.'
3

Chuỗi được trả về 

>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, Eric. You are 74.'
3 là chuỗi biểu diễn không chính thức của một đối tượng và phải có thể đọc được. Chuỗi được trả lại 
>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, Eric. You are 74.'
2 là đại diện chính thức và phải rõ ràng. Lời gọi đến 
>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, Eric. You are 74.'
6 và 
>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, Eric. You are 74.'
7 lại thích sử dụng 
>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, Eric. You are 74.'
3 và 
>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, Eric. You are 74.'
2 một cách trực tiếp

Theo mặc định, chuỗi f sẽ sử dụng 

>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, Eric. You are 74.'
3, nhưng bạn có thể chắc chắn rằng chúng sẽ sử dụng 
>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])
'Hello, Eric. You are 74.'
2 nếu bạn đưa vào cờ chuyển đổi 
>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(**person)
'Hello, Eric. You are 74.'
2

>>> name = "Eric"
>>> age = 74
>>> "Hello, %s. You are %s." % (name, age)
'Hello Eric. You are 74.'
5

Multi line in f-string

You can have the string many lines as after

>>> name = "Eric"
>>> age = 74
>>> "Hello, %s. You are %s." % (name, age)
'Hello Eric. You are 74.'
6

Nhưng hãy nhớ rằng bạn cần phải đặt một 

>>> "Hello, {1}. You are {0}.".format(age, name)
'Hello, Eric. You are 74.'
7 phía trước mỗi dòng của một chuỗi nhiều dòng. Code after will not active

>>> name = "Eric"
>>> age = 74
>>> "Hello, %s. You are %s." % (name, age)
'Hello Eric. You are 74.'
7

Nếu bạn không đặt 

>>> "Hello, {1}. You are {0}.".format(age, name)
'Hello, Eric. You are 74.'
7 trước từng dòng riêng lẻ, thì bạn sẽ chỉ có những dòng hiển thị thông thường

Nếu bạn muốn mở rộng các chuỗi trên nhiều dòng, bạn cũng có tùy chọn là thêm 

>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(**person)
'Hello, Eric. You are 74.'
5 như sau

>>> name = "Eric"
>>> age = 74
>>> "Hello, %s. You are %s." % (name, age)
'Hello Eric. You are 74.'
8

Nhưng đây là những điều sẽ xảy ra nếu bạn sử dụng 

>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(**person)
'Hello, Eric. You are 74.'
6

>>> name = "Eric"
>>> age = 74
>>> "Hello, %s. You are %s." % (name, age)
'Hello Eric. You are 74.'
9

Đọc kỹ hướng dẫn lề trong PEP 8

Speed

>>> "Hello, {1}. You are {0}.".format(age, name)
'Hello, Eric. You are 74.'
7 trong f-string cũng có thể là cách viết tắt của "fast"

f-string nhanh hơn cả %-format và 

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
6. Như bạn đã thấy, chuỗi f là các biểu thức được đánh giá trong thời gian chạy chứ không phải là các giá trị không thay đổi. Đây là một đoạn trích từ tài liệu

“F-string cung cấp một cách để nhúng các biểu thức vào bên trong các chuỗi ký tự, sử dụng một cú pháp tối thiểu. Cần lưu ý rằng một chuỗi f thực sự là một biểu thức được đánh giá tại thời điểm chạy, không phải là một giá trị hằng số. Trong mã nguồn Python, chuỗi f là một chuỗi chữ, có tiền tố là 

>>> "Hello, {1}. You are {0}.".format(age, name)
'Hello, Eric. You are 74.'
7, bao gồm các biểu thức bên trong dấu ngoặc nhọn. Các biểu thức được thay thế bằng các giá trị của chúng. ” ()

Trong thời gian chạy, biểu thức bên trong dấu trích dẫn bị đánh giá trong phạm vi riêng của nó và sau đó được đặt giống với ký tự phần của chuỗi f-string. Kết quả chuỗi sau đó được trả về. Đó là tất cả những gì nó cần

This is a so sánh tốc độ

>>> first_name = "Eric"
>>> last_name = "Idle"
>>> age = 74
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> "Hello, %s %s. You are %s. You are a %s. You were a member of %s." % (first_name, last_name, age, profession, affiliation)
'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.'
0

 

>>> first_name = "Eric"
>>> last_name = "Idle"
>>> age = 74
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> "Hello, %s %s. You are %s. You are a %s. You were a member of %s." % (first_name, last_name, age, profession, affiliation)
'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.'
1

 

>>> first_name = "Eric"
>>> last_name = "Idle"
>>> age = 74
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> "Hello, %s %s. You are %s. You are a %s. You were a member of %s." % (first_name, last_name, age, profession, affiliation)
'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.'
2

Như bạn có thể thấy, chuỗi f có thời gian thực thi nhỏ nhất

Tuy nhiên, không phải lúc nào cũng vậy. Khi chúng tôi được triển khai lần đầu tiên, chúng tôi có một số vấn đề về tốc độ và cần phải được thực hiện nhanh hơn 

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
6. Một BUILD_STRING opcode đặc biệt đã được giới thiệu với bạn

A number of note

Bây giờ bạn đã tìm hiểu tất cả về lý do tại sao f-string trở lại tuyệt vời, tôi chắc chắn rằng bạn đang rất muốn bắt đầu sử dụng chúng. Dưới đây là một số chi tiết cần ghi nhớ

Passcode sign

Bạn có thể sử dụng nhiều loại dấu ngoặc kép khác nhau trong các biểu thức. Chỉ cần đảm bảo rằng bạn không sử dụng cùng một loại dấu trích dẫn ở bên ngoài chuỗi f như bạn đang sử dụng trong biểu thức

Mã sau sẽ hoạt động

>>> first_name = "Eric"
>>> last_name = "Idle"
>>> age = 74
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> "Hello, %s %s. You are %s. You are a %s. You were a member of %s." % (first_name, last_name, age, profession, affiliation)
'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.'
3

Mã sau cũng sẽ hoạt động

>>> first_name = "Eric"
>>> last_name = "Idle"
>>> age = 74
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> "Hello, %s %s. You are %s. You are a %s. You were a member of %s." % (first_name, last_name, age, profession, affiliation)
'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.'
4

Bạn cũng có thể sử dụng dấu ngoặc kép

>>> first_name = "Eric"
>>> last_name = "Idle"
>>> age = 74
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> "Hello, %s %s. You are %s. You are a %s. You were a member of %s." % (first_name, last_name, age, profession, affiliation)
'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.'
5

 

>>> first_name = "Eric"
>>> last_name = "Idle"
>>> age = 74
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> "Hello, %s %s. You are %s. You are a %s. You were a member of %s." % (first_name, last_name, age, profession, affiliation)
'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.'
6

Nếu bạn thấy mình cần sử dụng cùng một loại dấu trích dẫn ở cả bên trong và bên ngoài chuỗi, thì bạn có thể thoát bằng 

>>> person = {'name': 'Eric', 'age': 74}
>>> "Hello, {name}. You are {age}.".format(**person)
'Hello, Eric. You are 74.'
5

>>> first_name = "Eric"
>>> last_name = "Idle"
>>> age = 74
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> "Hello, %s %s. You are %s. You are a %s. You were a member of %s." % (first_name, last_name, age, profession, affiliation)
'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.'
7

Dictionary

Nói về dấu ngoặc kép, hãy để ý khi bạn đang làm việc với từ điển. Nếu bạn định sử dụng dấu trích dẫn đơn cho các từ khóa của từ điển, thì hãy nhớ chắc chắn rằng bạn đang sử dụng dấu trích dẫn cho các chuỗi f chứa từ khóa

Điều sau sẽ hoạt động

>>> first_name = "Eric"
>>> last_name = "Idle"
>>> age = 74
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> "Hello, %s %s. You are %s. You are a %s. You were a member of %s." % (first_name, last_name, age, profession, affiliation)
'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.'
8

Nhưng đây sẽ là một trạng thái hỗn hợp nóng lên với một lỗi cú pháp

>>> first_name = "Eric"
>>> last_name = "Idle"
>>> age = 74
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> "Hello, %s %s. You are %s. You are a %s. You were a member of %s." % (first_name, last_name, age, profession, affiliation)
'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.'
9

Nếu bạn sử dụng cùng một loại dấu trích dẫn xung quanh các từ điển từ khóa như khi bạn làm ở bên ngoài chuỗi f, thì dấu trích dẫn đầu từ điển đầu tiên sẽ được hiểu là chuỗi cuối

Ngoặc xoắn ({})

Để tạo một dấu ngoặc kép trong chuỗi của bạn, bạn phải sử dụng dấu ngoặc kép

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
0

Lưu ý rằng nếu bạn sử dụng ba dấu ngoặc kép sẽ dẫn đến công việc chỉ có một dấu ngoặc kép trong chuỗi của bạn

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
1

Tuy nhiên, bạn có thể nhận được nhiều xoắn hơn để hiển thị nếu bạn sử dụng nhiều hơn ba xoắn

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
2

Dấu gạch chéo ngược (xổ trái)

Như bạn đã thấy trước đó, bạn có thể sử dụng các lối thoát gạch chéo ngược trong phần của chuỗi f. Tuy nhiên, bạn không thể sử dụng dấu gạch chéo ngược để thoát trong phần biểu thức của chuỗi f

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
3

Bạn có thể giải quyết vấn đề này bằng cách đánh giá trước biểu thức và sử dụng kết quả trong chuỗi f

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
4

Chú thích (bình luận) bên trong

Biểu thức không được bao gồm các chú thích sử dụng biểu tượng 

>>> first_name = "Eric"
>>> last_name = "Idle"
>>> age = 74
>>> profession = "comedian"
>>> affiliation = "Monty Python"
>>> print(("Hello, {first_name} {last_name}. You are {age}. " + 
>>>        "You are a {profession}. You were a member of {affiliation}.") \
>>>        .format(first_name=first_name, last_name=last_name, age=age, \
>>>                profession=profession, affiliation=affiliation))
'Hello, Eric Idle. You are 74. You are a comedian. You were a member of Monty Python.'
2. Bạn sẽ gặp lỗi cú pháp

>>> "Hello, {}. You are {}.".format(name, age)
'Hello, Eric. You are 74.'
5

Đọc thêm

Nếu bạn muốn xem thảo luận mở rộng về chuỗi nội suy, hãy xem PEP 502. Ngoài ra, dự thảo PEP 536 còn có thêm một số suy nghĩ về tương lai của chuỗi f