Định dạng chuỗi Python ()

Phương thức string format () định dạng chuỗi đã cho thành một đầu ra đẹp hơn trong Python.

Cú pháp của format()phương thức là:

 template.format (p0, p1,…, k0 = v0, k1 = v1,…)

Ở đây, p0, p1,… là các đối số vị trí và k0, k1,… là các đối số từ khóa có giá trị v0, v1,… tương ứng.

Và, mẫu là một hỗn hợp các mã định dạng với trình giữ chỗ cho các đối số.

Định dạng chuỗi () Tham số

format()phương thức nhận bất kỳ số lượng tham số. Nhưng, được chia thành hai loại tham số:

  • Tham số vị trí - danh sách các tham số có thể được truy cập với chỉ mục của tham số bên trong dấu ngoặc nhọn(index)
  • Tham số từ khóa - danh sách các tham số kiểu key = value, có thể được truy cập bằng khóa tham số bên trong dấu ngoặc nhọn(key)

Giá trị trả về từ định dạng Chuỗi ()

Các format()phương thức trả về chuỗi định dạng.

Cách thức hoạt động của định dạng chuỗi ()?

Hàm format()đọc loại đối số được truyền cho nó và định dạng nó theo các mã định dạng được xác định trong chuỗi.

Đối với các đối số vị trí

Đối số vị trí

Ở đây, Đối số 0 là một chuỗi "Adam" và Đối số 1 là một số thực 230.2346.

Lưu ý: Danh sách đối số bắt đầu từ 0 trong Python.

Chuỗi "Hello (0), your balance is (1:9.3f)"là chuỗi mẫu. Điều này chứa các mã định dạng để định dạng.

Các dấu ngoặc nhọn chỉ là chỗ dành sẵn cho các đối số được đặt. Trong ví dụ trên, (0) là trình giữ chỗ cho "Adam" và (1: 9.3f) là trình giữ chỗ cho 230.2346.

Vì chuỗi mẫu tham chiếu đến các format()đối số là (0)(1), các đối số là đối số vị trí. Cả hai đều có thể được tham chiếu mà không có số ()và Python chuyển đổi nội bộ chúng thành số.

Trong nội bộ,

  • Vì "Adam" là đối số thứ 0 nên nó được đặt ở vị trí của (0). Vì (0)không chứa bất kỳ mã định dạng nào khác nên nó không thực hiện bất kỳ hoạt động nào khác.
  • Tuy nhiên, nó không phải là trường hợp cho đối số thứ nhất 230.2346. Ở đây, (1:9.3f)đặt 230.2346 vào vị trí của nó và thực hiện hoạt động 9.3f.
  • f chỉ định định dạng xử lý với một số thực. Nếu không được chỉ định chính xác, nó sẽ báo lỗi.
  • Phần trước dấu "." (9) chỉ định chiều rộng / phần đệm tối thiểu mà số (230.2346) có thể sử dụng. Trong trường hợp này, 230.2346 được phân bổ tối thiểu 9 vị trí bao gồm cả dấu ".".
    Nếu không có tùy chọn căn chỉnh nào được chỉ định, nó sẽ được căn chỉnh ở bên phải của các khoảng trống còn lại. (Đối với chuỗi, nó được căn chỉnh về bên trái.)
  • Phần sau dấu "." (3) cắt bớt phần thập phân (2346) đến số đã cho. Trong trường hợp này, 2346 bị cắt bớt sau 3 vị trí.
    Các số còn lại (46) được làm tròn với kết quả đầu ra là 235.

Đối với các đối số từ khóa

Đối số từ khóa

Chúng tôi đã sử dụng cùng một ví dụ ở trên để cho thấy sự khác biệt giữa các đối số từ khóa và vị trí.

Ở đây, thay vì chỉ các tham số, chúng tôi đã sử dụng khóa-giá trị cho các tham số. Cụ thể, name = "Adam" và blc = 230.2346.

Vì các tham số này được tham chiếu bởi các khóa của chúng là (name) và (blc: 9.3f), chúng được gọi là các đối số từ khóa hoặc được đặt tên.

Trong nội bộ,

  • Phần giữ chỗ (tên) được thay thế bằng giá trị của tên - "Adam". Vì nó không chứa bất kỳ mã định dạng nào khác, nên "Adam" được đặt.
  • Đối với đối số blc = 230.2346, trình giữ chỗ (blc: 9.3f) được thay thế bằng giá trị 230.2346. Nhưng trước khi thay thế nó, giống như ví dụ trước, nó thực hiện thao tác 9.3f trên đó.
    Kết quả này là 230.235. Phần thập phân được cắt bớt sau 3 chữ số và các chữ số còn lại được làm tròn. Tương tự như vậy, tổng chiều rộng được ấn định là 9 để lại hai khoảng trắng ở bên trái.

Định dạng cơ bản với format ()

Các format()phương pháp cho phép sử dụng placeholders đơn giản để định dạng.

Ví dụ 1: Định dạng cơ bản cho các đối số mặc định, vị trí và từ khóa

 # default arguments print("Hello (), your balance is ().".format("Adam", 230.2346)) # positional arguments print("Hello (0), your balance is (1).".format("Adam", 230.2346)) # keyword arguments print("Hello (name), your balance is (blc).".format(name="Adam", blc=230.2346)) # mixed arguments print("Hello (0), your balance is (blc).".format("Adam", blc=230.2346))

Đầu ra

Xin chào Adam, số dư của bạn là 230.2346. Xin chào Adam, số dư của bạn là 230.2346. Xin chào Adam, số dư của bạn là 230.2346. Xin chào Adam, số dư của bạn là 230.2346.

Lưu ý: Trong trường hợp các đối số hỗn hợp, các đối số từ khóa phải luôn tuân theo các đối số vị trí.

Định dạng số với định dạng ()

Bạn có thể định dạng số bằng công cụ định dạng được cung cấp bên dưới:

Các kiểu định dạng số
Kiểu Ý nghĩa
d Số nguyên thập phân
c Ký tự Unicode tương ứng
b Định dạng nhị phân
o Định dạng bát phân
x Định dạng thập lục phân (chữ thường)
X Định dạng thập lục phân (chữ hoa)
n Tương tự như 'd'. Ngoại trừ nó sử dụng cài đặt ngôn ngữ hiện tại cho dấu phân tách số
e Ký hiệu mũ. (chữ e viết thường)
E Kí hiệu hàm mũ (chữ hoa E)
f Hiển thị số điểm cố định (Mặc định: 6)
F Tương tự như 'f'. Ngoại trừ hiển thị 'inf' là 'INF' và 'nan' là 'NAN'
g Định dạng chung. Làm tròn số đến p chữ số có nghĩa. (Độ chính xác mặc định: 6)
G Tương tự như 'g'. Ngoại trừ chuyển sang 'E' nếu số lượng lớn.
% Tỷ lệ phần trăm. Nhân với 100 và đặt% ở cuối.

Ví dụ 2: Định dạng số đơn giản

 # integer arguments print("The number is:(:d)".format(123)) # float arguments print("The float number is:(:f)".format(123.4567898)) # octal, binary and hexadecimal format print("bin: (0:b), oct: (0:o), hex: (0:x)".format(12))

Đầu ra

 Số là: 123 Số là: 123,456790 bin: 1100, oct: 14, hex: c

Ví dụ 3: Định dạng số với đệm cho int và float

 # integer numbers with minimum width print("(:5d)".format(12)) # width doesn't work for numbers longer than padding print("(:2d)".format(1234)) # padding for float numbers print("(:8.3f)".format(12.2346)) # integer numbers with minimum width filled with zeros print("(:05d)".format(12)) # padding for float numbers filled with zeros print("(:08.3f)".format(12.2346))

Đầu ra

1 2 1 2 3 4 1 2. 2 3 5 0 0 0 1 2 0 0 1 2. 2 3 5

Đây,

  • trong câu lệnh đầu tiên, (:5d)lấy một đối số là số nguyên và gán chiều rộng tối thiểu là 5. Vì không có căn chỉnh nào được chỉ định, nó được căn chỉnh ở bên phải.
  • Trong câu lệnh thứ hai, bạn có thể thấy chiều rộng (2) nhỏ hơn số (1234), vì vậy nó không chiếm bất kỳ khoảng trống nào ở bên trái nhưng cũng không cắt bớt số.
  • Không giống như số nguyên, float có cả phần nguyên và phần thập phân. Và, chiều rộng tối thiểu được xác định cho số là cho cả hai phần nói chung bao gồm cả "." .
  • Trong câu lệnh thứ ba, hãy (:8.3f)cắt bớt phần thập phân thành 3 vị trí làm tròn 2 chữ số cuối cùng. Và, con số, bây giờ là 12,235, có chiều rộng là 8 nói chung, để lại 2 vị trí bên trái.
  • Nếu bạn muốn điền số 0 vào những chỗ còn lại, hãy đặt số 0 trước công cụ định dạng thực hiện việc này. Nó hoạt động cho cả số nguyên và số nổi: (:05d)(:08.3f).

Ví dụ 4: Định dạng số cho các số có dấu

 # show the + sign print("(:+f) (:+f)".format(12.23, -12.23)) # show the - sign only print("(:-f) (:-f)".format(12.23, -12.23)) # show space for + sign print("(: f) (: f)".format(12.23, -12.23))

Đầu ra

+12.230000 -12.230000 12.230000 -12.230000 1 2. 2 3 0 0 0 0 - 1 2. 2 3 0 0 0 0

Định dạng số với căn chỉnh

Các toán tử and =được sử dụng để căn chỉnh khi được gán một độ rộng nhất định cho các số.

Định dạng số với căn chỉnh
Kiểu Ý nghĩa
< Căn trái đến khoảng trống còn lại
^ Căn giữa cho không gian còn lại
> Căn phải vào khoảng trống còn lại
= Buộc ký hiệu (+) (-) ở vị trí ngoài cùng bên trái

Ví dụ 5: Định dạng số với căn chỉnh trái, phải và giữa

 # integer numbers with right alignment print("(:5d)".format(12)) # float numbers with center alignment print("(:^10.3f)".format(12.2346)) # integer left alignment filled with zeros print("(:<05d)".format(12)) # float numbers with center alignment print("(:=8.3f)".format(-12.2346))

Đầu ra

1 2 1 2. 2 3 5 1 2 0 0 0 - 1 2. 2 3 5

Lưu ý: Căn chỉnh bên trái chứa đầy số không cho số nguyên có thể gây ra sự cố như ví dụ thứ 3 trả về 12000, thay vì 12.

Định dạng chuỗi với format ()

Là số, chuỗi có thể được định dạng theo cách tương tự với format().

Example 6: String formatting with padding and alignment

 # string padding with left alignment print("(:5)".format("cat")) # string padding with right alignment print("(:>5)".format("cat")) # string padding with center alignment print("(:^5)".format("cat")) # string padding with center alignment # and '*' padding character print("(:*^5)".format("cat"))

Output

 c a t c a t c a t * c a t * 

Example 7: Truncating strings with format()

 # truncating strings to 3 letters print("(:.3)".format("caterpillar")) # truncating strings to 3 letters # and padding print("(:5.3)".format("caterpillar")) # truncating strings to 3 letters, # padding and center alignment print("(:^5.3)".format("caterpillar"))

Output

 c a t c a t c a t 

Formatting class and dictionary members using format()

Python internally uses getattr() for class members in the form ".age". And, it uses __getitem__() lookup for dictionary members in the form "(index)".

Example 8: Formatting class members using format()

 # define Person class class Person: age = 23 name = "Adam" # format age print("(p.name)'s age is: (p.age)".format(p=Person()))

Output

 Adam's age is: 23 

Here, Person object is passed as a keyword argument p.

Inside the template string, Person's name and age are accessed using .name and .age respectively.

Example 9: Formatting dictionary members using format()

 # define Person dictionary person = ('age': 23, 'name': 'Adam') # format age print("(p(name))'s age is: (p(age))".format(p=person))

Output

 Adam's age is: 23 

Similar to class, person dictionary is passed as a keyword argument p.

Inside the template string, person's name and age are accessed using (name) and (age) respectively.

There's an easier way to format dictionaries in Python using str.format(**mapping).

 # define Person dictionary person = ('age': 23, 'name': 'Adam') # format age print("(name)'s age is: (age)".format(**person))

** is a format parameter (minimum field width).

Arguments as format codes using format()

You can also pass format codes like precision, alignment, fill character as positional or keyword arguments dynamically.

Example 10: Dynamic formatting using format()

 # dynamic string format template string = "(:(fill)(align)(width))" # passing format codes as arguments print(string.format('cat', fill='*', # dynamic float format template num = "(:(align)(width).(precision)f)" # passing format codes as arguments print(num.format(123.236,>

Output

 * * c a t * * 1 2 3 . 2 4 

Here,

  • In the first example, 'cat' is the positional argument is to be formatted. Likewise, fill='*', align='^' and width=5 are keyword arguments.
  • In the template string, these keyword arguments are not retrieved as normal strings to be printed but as the actual format codes fill, align and width.
    The arguments replaces the corresponding named placeholders and the string 'cat' is formatted accordingly.
  • Likewise, in the second example, 123.236 is the positional argument and, align, width and precision are passed to the template string as format codes.

Extra formatting options with format()

format() also supports type-specific formatting options like datetime's and complex number formatting.

format() internally calls __format__() for datetime, while format() accesses the attributes of the complex number.

You can easily override the __format__() method of any object for custom formatting.

Example 11: Type-specific formatting with format() and overriding __format__() method

 import datetime # datetime formatting date = datetime.datetime.now() print("It's now: (:%Y/%m/%d %H:%M:%S)".format(date)) # complex number formatting complexNumber = 1+2j print("Real part: (0.real) and Imaginary part: (0.imag)".format(complexNumber)) # custom __format__() method class Person: def __format__(self, format): if(format == 'age'): return '23' return 'None' print("Adam's age is: (:age)".format(Person()))

Output

 It's now: 2016/12/02 04:16:28 Real part: 1.0 and Imaginary part: 2.0 Adam's age is: 23 

Here,

  • For datetime:
    Current datetime is passed as a positional argument to the format() method.
    And, internally using __format__() method, format() accesses the year, month, day, hour, minutes and seconds.
  • For complex numbers:
    1+2j is internally converted to a ComplexNumber object.
    Then accessing its attributes real and imag, the number is formatted.
  • Overriding __format__():
    Like datetime, you can override your own __format__() method for custom formatting which returns age when accessed as (:age)

Bạn cũng có thể sử dụng đối tượng __str__()__repr__()chức năng với các ký hiệu viết tắt bằng cách sử dụng format().

Giống như __format__(), bạn có thể dễ dàng ghi đè các phương thức __str__()và đối tượng __repr_().

Ví dụ 12: __str () __ và __repr () __ viết tắt! R và! S sử dụng định dạng ()

 # __str__() and __repr__() shorthand !r and !s print("Quotes: (0!r), Without Quotes: (0!s)".format("cat")) # __str__() and __repr__() implementation for class class Person: def __str__(self): return "STR" def __repr__(self): return "REPR" print("repr: (p!r), str: (p!s)".format(p=Person()))

Đầu ra

 Dấu ngoặc kép: 'cat', Không có dấu ngoặc kép: cat repr: REPR, str: STR 

thú vị bài viết...