एक मेरी कक्षाओं के अजगर में पूरा होने की कार्य की आवश्यकता है, और एक अभ्यास के रूप में, मैं लगाते आ रहे हैं यकीन है कि मेरे कार्यक्रमों दोनों अजगर 2 और अजगर 3 में काम करते हैं, इस तरह एक स्क्रिप्ट का उपयोग:पाइथन 3 की 'रेंज' को पाइथन 2 में "बैकपोर्टिंग" एक बुरा विचार है?
#!/bin/bash
# Run some PyUnit tests
python2 test.py
python3 test.py
एक
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
इस एक बुरा विचार है: बात मैं कर रहा हूँ range
काम कोड के इस टुकड़े के साथ दोनों संस्करणों में एक ही कर रही है?
संपादित करें:
इस का कारण यह है कि xrange
और अजगर 2 और अजगर 3 में अलग range
काम करते हैं, और मैं अपने कोड दोनों में एक ही बात करना चाहता हूँ। मैं इसे दूसरी तरफ कर सकता था, लेकिन पाइथन 3 की तरह पायथन 3 काम करना बेवकूफ लगता है, क्योंकि पाइथन 3 "भविष्य" है।
यहाँ क्यों सिर्फ range
का उपयोग कर काफी अच्छा नहीं है की एक उदाहरण है:
for i in range(1000000000):
do_something_with(i)
मैं स्पष्ट रूप से सूची का उपयोग नहीं कर रहा हूँ, लेकिन अजगर 2 में, इस स्मृति के एक पागल राशि का उपयोग करेगा।
यह वास्तव में पायथन 2 की सीमा के साथ काम नहीं करता है? –
मैं नहीं कहूंगा कि यह एक बुरा विचार है, लेकिन नाम 'श्रेणी' का पुन: उपयोग करना बुरा होगा। अगर मुझे पायथन 2.x कोड में 'रेंज' दिखाई देता है, तो मैं उम्मीद करता हूं कि यह एक सूची लौटाएगा और एक इटरेटर नहीं होगा और यह देखने के लिए कोड को खोजना होगा कि नाम फिर से सौंप दिया गया है या नहीं। शायद एक साथ अलग-अलग नामों का उपयोग करना आसान होगा या इसके बजाय 'xrange' का पुन: उपयोग करना आसान होगा क्योंकि इसे पायथन 3.x में परिभाषित नहीं किया गया है। –
आप क्या कर रहे हैं जो 'xrange' के साथ काम करता है लेकिन पायथन 2.x की' रेंज' नहीं है? –