9. Các thành phần cấp cao nhất¶
Trình thông dịch Python có thể lấy đầu vào từ một số nguồn: từ một tập lệnh được truyền tới nó dưới dạng đầu vào tiêu chuẩn hoặc dưới dạng đối số chương trình, được nhập tương tác, từ tệp nguồn mô-đun, v.v. Chương này đưa ra cú pháp được sử dụng trong những trường hợp này.
9.1. Hoàn thành các chương trình Python¶
Mặc dù đặc tả ngôn ngữ không cần quy định cách gọi trình thông dịch ngôn ngữ, nhưng sẽ rất hữu ích khi có khái niệm về một chương trình Python hoàn chỉnh. Một chương trình Python hoàn chỉnh được thực thi trong môi trường được khởi tạo ở mức tối thiểu: tất cả các mô-đun tiêu chuẩn và tích hợp sẵn đều có sẵn, nhưng chưa có mô-đun nào được khởi tạo, ngoại trừ sys (các dịch vụ hệ thống khác nhau), builtins (các hàm tích hợp, ngoại lệ và None) và __main__. Cái sau được sử dụng để cung cấp không gian tên cục bộ và toàn cục để thực thi chương trình hoàn chỉnh.
Cú pháp của một chương trình Python hoàn chỉnh là cú pháp nhập tệp, được mô tả trong phần tiếp theo.
Trình thông dịch cũng có thể được gọi ở chế độ tương tác; trong trường hợp này, nó không đọc và thực thi một chương trình hoàn chỉnh mà đọc và thực thi một câu lệnh (có thể là câu lệnh ghép) tại một thời điểm. Môi trường ban đầu giống hệt với môi trường của một chương trình hoàn chỉnh; mỗi câu lệnh được thực thi trong không gian tên của __main__.
Một chương trình hoàn chỉnh có thể được chuyển tới trình thông dịch dưới ba dạng: với tùy chọn dòng lệnh -c string, dưới dạng tệp được truyền dưới dạng đối số dòng lệnh đầu tiên hoặc dưới dạng đầu vào tiêu chuẩn. Nếu tệp hoặc đầu vào tiêu chuẩn là một thiết bị tty, trình thông dịch sẽ chuyển sang chế độ tương tác; nếu không, nó sẽ thực thi tệp như một chương trình hoàn chỉnh.
9.2. Nhập tập tin¶
Tất cả dữ liệu đầu vào được đọc từ các tệp không tương tác đều có cùng dạng:
file_input: (NEWLINE | statement)* ENDMARKER
Cú pháp này được sử dụng trong các tình huống sau:
khi phân tích cú pháp một chương trình Python hoàn chỉnh (từ một tệp hoặc từ một chuỗi);
khi phân tích một mô-đun;
khi phân tích một chuỗi được truyền cho hàm
exec();
9.3. Đầu vào tương tác¶
Đầu vào ở chế độ tương tác được phân tích cú pháp bằng ngữ pháp sau:
interactive_input: [stmt_list] NEWLINE |compound_stmtNEWLINE | ENDMARKER
Lưu ý rằng một câu lệnh ghép (cấp cao nhất) phải được theo sau bởi một dòng trống trong chế độ tương tác; điều này là cần thiết để giúp trình phân tích cú pháp phát hiện phần cuối của đầu vào.
9.4. Đầu vào biểu thức¶
eval() được sử dụng để nhập biểu thức. Nó bỏ qua khoảng trắng hàng đầu. Đối số chuỗi cho eval() phải có dạng sau:
eval_input: expression_list NEWLINE* ENDMARKER