2011-03-22 27 views
6

Tôi biết điều này là sai điều cần làm, nhưng tôi đang sử dụng python 3 nhưng nghiên cứu nó với python 2 cuốn sách.Python 3.2 nhàn rỗi: chức năng phạm vi - in hoặc danh sách?

nó nói,

>>>range(2,7) 

sẽ hiển thị

[2,3,4,5,6] 

nhưng tôi biết nó sẽ không hiển thị kết quả trên, RẰNG I figured. vì vậy tôi cố gắng:

>>>>print(range(2,7)) 

và ta-da- nó cho thấy theo:

range(2,7) 

trông như thế này là một trong những thay đổi từ P2 đến P3 vì vậy tôi cố gắng:

list(range(2,7)) 

này hoạt động ok trên IDLE nhưng không ok trên notepad cho mã hóa dài. vì vậy cuối cùng tôi đã thử:

print(list(range(2,7))) 

và nó cho thấy một cái gì đó tương tự như những gì tôi dự định ... Tôi có làm đúng không? Đây có phải là cách duy nhất để viết nó?

+0

vấn đề này cũng áp dụng cho zip. Bạn cần 'list (zip (stuff))' –

Trả lời

6

Trong trường hợp IDLE, bạn đang chạy mã trong cửa sổ PyShell của IDLE. Điều này đang chạy trình thông dịch tương tác. Trong chế độ tương tác, Python diễn giải ngay lập tức mỗi dòng bạn nhập vào và nó hiển thị giá trị được trả về bằng cách đánh giá câu lệnh bạn đã nhập cộng với bất kỳ thứ gì được ghi vào đầu ra tiêu chuẩn hoặc lỗi chuẩn. Đối với Python 2, range() trả về một danh sách và, như bạn đã khám phá, trong Python 3, nó trả về đối tượng có thể lặp lại range() mà bạn có thể sử dụng để tạo đối tượng danh sách hoặc sử dụng ở nơi khác trong ngữ cảnh lặp. Python 3 range() tương tự như của Python 2 xrange().

Khi bạn chỉnh sửa tệp trong trình chỉnh sửa như Notepad, bạn đang viết tệp tập lệnh và khi bạn chạy tệp trong trình thông dịch Python, toàn bộ tập lệnh được diễn giải và chạy dưới dạng đơn vị, ngay cả khi chỉ là một dòng Dài. Trên màn hình, bạn chỉ nhìn thấy những gì được ghi vào đầu ra tiêu chuẩn (tức là "print()") hoặc lỗi chuẩn (tức là các dấu vết lỗi); bạn không thấy kết quả đánh giá của từng câu lệnh khi bạn thực hiện trong chế độ tương tác. Vì vậy, trong ví dụ của bạn, khi chạy từ một tập tin kịch bản, nếu bạn không in kết quả đánh giá một cái gì đó bạn sẽ không nhìn thấy nó.

Hướng dẫn Python nói một chút về điều này here.

4

Nếu mục tiêu duy nhất của bạn là lấy lại danh sách đại diện, những gì bạn đang làm là chính xác. Python 3.0 bây giờ xử lý range khi trả về một trình lặp (những gì xrange được sử dụng để làm)

Các vấn đề liên quan