Việc sử dụng '{}' trong các chuỗi định dạng có được coi là Pythonic không?


9

Tôi vừa học bạn có thể viết

'{}{}'.format(string_a, string_b)

thay vì

'{0}{1}'.format(string_a, string_b)

trong Python, tức là bạn có thể bỏ qua các chữ số cho các tham số định dạng chuỗi khi bạn muốn mọi thứ theo thứ tự từng cái một.

Đây có được coi là Pythonic?

LƯU Ý: "Pythonic" là một thuật ngữ thường được sử dụng trong số các lập trình viên Python có nghĩa là mã Python thành ngữ. Trong văn hóa Python, có xu hướng có sự đồng thuận rõ ràng về các câu hỏi về phong cách, đặc biệt là đối với những câu hỏi rất cụ thể như câu hỏi này, với triết lý thiết kế rõ ràng của ngôn ngữ là "Nên có một - và tốt nhất là chỉ có một cách - rõ ràng để làm điều đó". Điều này được trích dẫn từ "Zen of Python", một tập hợp các câu cách ngôn đi một chặng đường dài hướng tới việc xác định "Pythonic" là gì và được bao gồm trong mọi bản phân phối Python (tại bất kỳ dòng lệnh trình thông dịch Python nào, nhập vào import thisđể xem nó).


4
@GregHewgill: "Pythonic" là một thuật ngữ được sử dụng khá phổ biến, về cơ bản có nghĩa là "Python thành ngữ"; loại mã Python mà người hâm mộ mã Python chất lượng sẽ thấy hài lòng về phong cách.
Carson63000

1
Tính năng rất cụ thể này được bao gồm rõ ràng trong Python (đây không thực sự là một câu hỏi về phong cách), vậy tại sao nó không được coi là "Pythonic" theo bất kỳ định nghĩa hợp lý nào? Theo tôi biết, không có tính năng nào của ngôn ngữ được coi là "unPythonic".
Greg Hewgill

4
Để tham khảo, {}tính năng này được giới thiệu trong Python 3.1 . Sự cải tiến đã thúc đẩy sự bổ sung này là vấn đề 5237 . Guido có một số ý kiến ​​về vấn đề đó, bao gồm "Xin hãy tiếp tục và hoàn thành việc này. Tôi rất vui vì điều này sẽ xảy ra!" Nếu đó không được coi là "Pythonic", tôi không biết nó là gì.
Greg Hewgill

4
Đối với những người đang bỏ phiếu để đóng câu hỏi này, tôi có thể chỉ ra rằng Pythonic là gì hay không là một phần quan trọng của văn hóa mã hóa Python và tôi cho rằng văn hóa mã hóa là một yếu tố quan trọng của công nghệ phần mềm, một chủ đề được chấp nhận trang web này.
Ghopper21

2
@Andrea - đó chính xác là những gì tôi nghĩ đầu tiên, nhưng thật khó để tranh luận rằng BDFL nghĩ rằng nó không phải là Pythonic. Sau khi xem câu nói của anh ấy về điều này, tôi quay lại nhìn Zen của Python một lần nữa và nghĩ có lẽ đây là một trường hợp "thực tế đánh bại sự thuần khiết"? Lý do trong cuộc thảo luận (được liên kết trong câu trả lời của Greg) xoay quanh sự thuận tiện cho người viết mã. Và trong mọi trường hợp, cách thực sự rõ ràng nhất để sử dụng định dạng chuỗi là "{a}{b}".format(a=string_a, b=string_b)thay vì đánh số. Nhưng dù sao, đó chỉ là suy đoán của tôi và đọc giữa dòng suy nghĩ ...
Ghopper21

Câu trả lời:


12

Các {}tính năng được giới thiệu trong Python 3.1 (và cũng backported để Python 2.7). Sự cải tiến đã thúc đẩy sự bổ sung này là vấn đề 5237 . Guido có một số ý kiến ​​về vấn đề đó, bao gồm:

Hãy tiếp tục và hoàn thành nó. Tôi rất vui vì điều này sẽ xảy ra!

Một tính năng với loại chứng thực từ BDFL chắc chắn sẽ được coi là "Pythonic" theo bất kỳ biện pháp nào.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.