Một trong lớp học của tôi đòi hỏi phải có nhiệm vụ sẽ hoàn thành vào Python, và như một bài tập, tôi đã đảm bảo chương trình của tôi làm việc trong cả hai Python 2 và Python 3, sử dụng một kịch bản như thế này:Có phải "backporting" phạm vi `Python` của Python 3 thành Python 2 là một ý tưởng tồi không?
#!/bin/bash
# Run some PyUnit tests
python2 test.py
python3 test.py
Một điều tôi đã làm là làm cho range
hoạt động tương tự trong cả hai phiên bản với đoạn mã này:
import sys
# Backport Python 3's range to Python 2 so that this program will run
# identically in both versions.
if sys.version_info < (3, 0):
range = xrange
Đây có phải là một ý tưởng tồi không?
EDIT:
Lý do cho điều này là xrange
và range
và hoạt động khác trong Python 2 và Python 3, và tôi muốn mã của tôi để làm điều tương tự trong cả hai. Tôi có thể làm điều đó theo cách khác, nhưng làm cho Python 3 hoạt động như Python 2 có vẻ ngu ngốc, vì Python 3 là "tương lai".
Dưới đây là một ví dụ về lý do tại sao chỉ sử dụng range
là không đủ tốt:
for i in range(1000000000):
do_something_with(i)
Tôi rõ ràng là không sử dụng danh sách, nhưng trong Python 2, điều này sẽ sử dụng một số tiền điên của bộ nhớ.
Nó thực sự không hoạt động với phạm vi của Python 2? –
Tôi sẽ không nói đó là một ý tưởng tồi, nhưng nó sẽ là một xấu để tái sử dụng tên 'phạm vi'. Nếu tôi thấy 'phạm vi' trong mã Python 2.x, tôi sẽ mong đợi nó trả về một danh sách và không phải là một trình lặp và không phải tìm kiếm qua mã để xem tên đã được gán lại hay chưa. Nó có thể sẽ dễ dàng hơn khi sử dụng một tên khác với nhau hoặc thậm chí tái sử dụng 'xrange' thay vì nó không được định nghĩa trong Python 3.x. –
Bạn đang làm gì với 'xrange' nhưng không phải là' phạm vi' của Python 2.x? –