2012-01-22 37 views
7

Tôi có một số kiến ​​thức về Python 3 (tôi không phải là người mới bắt đầu, nhưng tôi không phải là chuyên gia). Tôi quan tâm đến phát triển web, vì vậy tôi muốn sử dụng Django. Sự khác nhau giữa hai phiên bản Python là gì? Làm thế nào tôi nên chuyển đổi từ 3 đến 2.x?Làm cách nào để tìm hiểu Python 2 nếu tôi đã biết Python 3?

Trả lời

5

Họ không phải là quá khác biệt. Hầu hết mọi thứ bạn học được trong Python 3 sẽ chuyển sang Python 2. Tôi khuyên bạn nên đi sâu vào. Đôi khi bạn sẽ thấy một thông báo lỗi, nhưng hầu hết thời gian họ sẽ tự giải thích.

đặt cược của tôi là học Django sẽ cách khó hơn làm quen với Python 2.

Bạn có thể tìm ra six thư viện hữu ích nếu bạn muốn viết mã mà là mạnh mẽ tương thích ngược. Nếu không, tôi chỉ có thể nghĩ đến hai điều đó có thể là quan trọng để biết trước khi bạn đi ngược trở lại để Python 2:

  1. Tránh sử dụng các lớp học kiểu cũ. Trong Python 3, bạn có thể khai báo một lớp như thế này, mà không cần bất kỳ vấn đề:

    class Foo: 
        pass 
    

    bằng Python 2, nếu bạn làm điều đó, bạn sẽ có được một lớp học kiểu cũ, mà có thể bạn không muốn. Nhưng bạn sẽ không nhận được bất kỳ thông báo lỗi nào về điều này, vì vậy các lỗi thừa kế tinh vi có thể phát sinh và ẩn trong một thời gian dài trước khi gây ra sự cố. Vì vậy, trong Python 2, nhớ để thừa hưởng một cách rõ ràng từ object:

    class Foo(object): 
        pass 
    
  2. Tránh sử dụng range(n), ít nhất là cho các giá trị lớn n. Trong Python 3, range trả về một trình lặp thông minh, nhưng trong Python 2, range trả về một danh sách thực tế. Đối với phạm vi rộng, nó có thể đốt cháy rất nhiều bộ nhớ. Để có được hành vi của Python 3's range trong Python 2, sử dụng xrange(n). Cảnh báo tương tự áp dụng cho các phương thức từ điển keys(), values()items(). Tất cả đều trả về danh sách bằng Python 2. Sử dụng các phương thức iterkeys(), itervalues()iteritems() để tiết kiệm bộ nhớ.

Có một số câu trả lời tuyệt vời khác cho câu hỏi này bao gồm một vài chi tiết khác, chẳng hạn như hỗ trợ unicode.

+0

Cảm ơn. Có lẽ tôi đã phạm phải sai lầm đó mà không hề nhận ra điều đó. – Orcris

5

Nếu bạn đã quen thuộc với Python 3, sau đó có gần không khác biệt bạn sẽ phải lo lắng về việc khi mã hóa bằng Python 2. Sự khác biệt với người sử dụng dễ thấy nhất đã làm với các chi tiết của các tuyên bố print, mà bạn có thể sẽ không được sử dụng cho Django anyway.

Vì vậy, chỉ cần viết mã và hỏi về bất kỳ vấn đề nào cụ thể bạn có thể gặp phải.

3

Một khác biệt lớn là cách Python 3 xử lý unicode - mọi thứ trong Python 3 là chuỗi unicode hoặc dữ liệu nhị phân, trong khi trong Python 2 phân biệt giữa chuỗi unicode và chuỗi 8 bit.

Các trang sau có rất nhiều thông tin thêm về sự khác biệt giữa Python 2 và 3. http://docs.python.org/release/3.0.1/whatsnew/3.0.html

1

Đọc qua này: http://python3porting.com/differences.html

Lưu ý rằng có rất nhiều thứ chỉ đơn giản là ra khỏi Python 2, như áp dụng(), mà bạn do đó không cần phải lo lắng.

Ngoài ra, như được ghi chú bởi người gửi, bạn sử dụng phân lớp từ đối tượng (điều này cũng được đề xuất trong Python 3, có thể vì lý do thực sự tạo sự khác biệt trong Python 2).

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