Tôi thường sử dụng mô hình sau (như đã đề cập trong this question):hình thức viết tắt của string.Format (..., người dân địa phương **())
a=1
s= "{a}".format(**locals())
Tôi nghĩ rằng đó là một cách tuyệt vời để viết một cách dễ dàng có thể đọc được mã.
Đôi khi nó là hữu ích để "chuỗi" các định dạng chuỗi, để "modularize" việc tạo ra các chuỗi phức tạp:
a="1"
b="2"
c="{a}+{b}".format(**locals())
d="{c} is a sum".format(**locals())
#d=="1+2 is a sum"
Khá sớm, các mã được quấy rầy với X.format(**locals())
. Để giải quyết vấn đề này, tôi đã cố gắng để tạo ra một lambda:
f= lambda x: x.format(**locals())
a="1"
b="2"
c= f("{a}+{b}")
d= f("{c} is a sum")
nhưng điều này ném một KeyError, vì locals()
là người dân địa phương của lambda.
Tôi cũng đã cố gắng để áp dụng định dạng duy nhất trên chuỗi cuối cùng:
a="1"
b="2"
c="{a}+{b}"
d="{c} is a sum".format(**locals())
#d=="{a}+{b} is a sum"
Nhưng điều này không làm việc, kể từ python chỉ định dạng một lần. Bây giờ, tôi có thể viết một hàm định dạng tục cho đến khi không có gì hơn để làm:
def my_format(string, vars):
f= string.format(**vars)
return f if f==string else my_format(f, vars)
nhưng tôi đang tự hỏi: có cách nào tốt hơn để làm điều này?
Bạn có thể muốn người dân địa phương ghi đè hình ảnh toàn cầu. Hiện tại, bạn có nó theo cách khác vòng, kể từ sau đối số để giành chiến thắng dict. – Collin
điểm tốt ... tôi sẽ thực hiện thay đổi đó. –