Vì Python 3.0 và 3.1 là EOL'ed và không ai sử dụng chúng, bạn có thể và nên sử dụng str.format_map(mapping)
(Python 3.2+):
Tương tự str.format(**mapping)
, ngoại trừ việc ánh xạ được sử dụng trực tiếp và không được sao chép vào adict
. Điều này rất hữu ích nếu ví dụ ánh xạ là một dict
lớp con.
Điều này có nghĩa là bạn có thể sử dụng ví dụ a defaultdict
sẽ đặt (và trả về) một giá trị mặc định cho các khóa bị thiếu:
>>> from collections import defaultdict
>>> vals = defaultdict(lambda: '<unset>', {'bar': 'baz'})
>>> 'foo is {foo} and bar is {bar}'.format_map(vals)
'foo is <unset> and bar is baz'
Ngay cả khi ánh xạ được cung cấp là một dict
, không phải là một lớp con, điều này có thể vẫn sẽ nhanh hơn một chút.
Sự khác biệt không lớn mặc dù, được đưa ra
>>> d = dict(foo='x', bar='y', baz='z')
sau đó
>>> 'foo is {foo}, bar is {bar} and baz is {baz}'.format_map(d)
nhanh hơn khoảng 10 ns (2%)
>>> 'foo is {foo}, bar is {bar} and baz is {baz}'.format(**d)
trên Python của tôi 3.4.3. Sự khác biệt có lẽ sẽ lớn hơn khi có nhiều khóa hơn trong từ điển và
Lưu ý rằng ngôn ngữ định dạng linh hoạt hơn nhiều so với mặc dù; chúng có thể chứa các biểu thức được lập chỉ mục, truy cập thuộc tính, v.v. có thể định dạng toàn bộ một đối tượng hoặc 2 trong số chúng:
>>> p1 = {'latitude':41.123,'longitude':71.091}
>>> p2 = {'latitude':56.456,'longitude':23.456}
>>> '{0[latitude]} {0[longitude]} - {1[latitude]} {1[longitude]}'.format(p1, p2)
'41.123 71.091 - 56.456 23.456'
Bắt đầu từ 3.6, bạn cũng có thể sử dụng các chuỗi nội suy:
>>> f'lat:{p1["latitude"]} lng:{p1["longitude"]}'
'lat:41.123 lng:71.091'
Bạn chỉ cần nhớ sử dụng các ký tự trích dẫn khác trong các trích dẫn lồng nhau. Một nhược điểm khác của phương pháp này là nó nhanh hơn nhiều so với việc gọi một phương thức định dạng.