Sau khi đào rất nhiều danh sách gửi thư, tôi đã tìm thấy một tuyên bố khá rõ ràng rằng trình phân tích cú pháp là tốt với nó. Các dấu ngoặc đơn được thực hiện bắt buộc để làm cho ý nghĩa rõ ràng hơn. Đây là một trích dẫn từ Guido trở lại vào năm 2000 trong danh sách gửi thư của python-dev:
Đừng lo lắng. Greg Ewing không có vấn đề gì trong việc diễn đạt điều này bằng ngữ pháp của Python, vốn bị hạn chế như các trình phân tích cú pháp. (Đó là LL (1), tương đương với dòng dõi đệ quy thuần túy với một mã thông báo tìm kiếm, tức là không quay lại.)
Đây là ngữ pháp của Greg:
atom: ... | '[' [testlist [list_iter]] ']' | ...
list_iter: list_for | list_if
list_for: 'for' exprlist 'in' testlist [list_iter]
list_if: 'if' test [list_iter]
Lưu ý rằng trước đây, cú pháp danh sách là '[' [testlist] ']'. Hãy để tôi giải thích nó theo các thuật ngữ khác nhau:
Trình phân tích cú pháp phân tích cú pháp một loạt các biểu thức được phân tách bằng dấu phẩy. Trước đây, nó được kỳ vọng ']'là mã thông báo duy nhất có thể theo sau này. Sau khi thay đổi, 'for'là một mã thông báo sau có thể khác. Điều này hoàn toàn không có vấn đề gì đối với bất kỳ trình phân tích cú pháp nào biết cách phân tích dấu ngoặc đơn phù hợp!
Nếu bạn không muốn hỗ trợ [x, y for ...]vì nó mơ hồ (với người đọc, không phải trình phân tích cú pháp!), Chúng ta có thể thay đổi ngữ pháp thành một cái gì đó như:
'[' test [',' testlist | list_iter] ']'
(Lưu ý rằng |liên kết ít hơn nối và [...]có nghĩa là một phần tùy chọn.)
Cũng xem phản hồi tiếp theo trong chuỗi, nơi Greg Ewing chạy
>>> seq = [1,2,3,4,5]
>>> [x, x*2 for x in seq]
[(1, 2), (2, 4), (3, 6), (4, 8), (5, 10)]
trên một phiên bản đầu của bản vá hiểu danh sách, và nó hoạt động tốt.