เมื่อเร็ว ๆ นี้ฉันเริ่มใช้ Python3 และมันก็ไม่มีความเจ็บปวด xrange
ตัวอย่างง่ายๆ:
1) Python2:
from time import time as t
def count():
st = t()
[x for x in xrange(10000000) if x%4 == 0]
et = t()
print et-st
count()
2) Python3:
from time import time as t
def xrange(x):
return iter(range(x))
def count():
st = t()
[x for x in xrange(10000000) if x%4 == 0]
et = t()
print (et-st)
count()
ผลลัพธ์ที่ได้ตามลำดับ:
1) 1.53888392448 2) 3.215819835662842
ทำไมถึงเป็นอย่างนั้น? ฉันหมายความว่าทำไม xrange ถึงถูกลบ? มันเป็นเครื่องมือที่ยอดเยี่ยมในการเรียนรู้ สำหรับผู้เริ่มต้นเช่นเดียวกับตัวฉันเหมือนกับที่เราทุกคนเคยมีอยู่ในบางจุด ทำไมลบมันออก? ใครบางคนสามารถชี้ให้ฉันไปที่ PEP ที่เหมาะสมฉันไม่สามารถหาได้
ไชโย
timeคุณไม่ควรเวลากับ นอกเหนือจากการใช้งานง่ายขึ้นและยากที่จะเข้าใจผิดและทดสอบซ้ำสำหรับคุณtimeitดูแลทุกสิ่งที่คุณจำไม่ได้หรือรู้วิธีดูแล (เช่นปิดการใช้งาน GC) และอาจใช้ นาฬิกาที่มีความละเอียดมากกว่าพันเท่า
rangeบนx%4 == 0? ทำไมไม่ลองทดสอบlist(xrange())เทียบกับlist(range())มันมีงานนอกโลกให้น้อยที่สุดเท่าที่จะทำได้? (ตัวอย่างเช่นคุณจะรู้ได้อย่างไรว่า 3.x ไม่ได้ทำงานx%4ช้ากว่ากัน) สำหรับเรื่องนี้เหตุใดคุณจึงสร้างอาคารขนาดใหญ่listที่เกี่ยวข้องกับการจัดสรรหน่วยความจำจำนวนมาก (ซึ่งนอกเหนือจากการช้าก็เป็นตัวแปรที่เหลือเชื่อเช่นกัน) ?
iter(range)ซ้ำซ้อน
list(range(..))หากคุณต้องการผลในรายการให้ทำ นั่นเท่ากับช่วงของ python 2 หรือจะบอกว่าเป็นอีกวิธีหนึ่ง: xrange ถูกเปลี่ยนชื่อเป็น range เพราะมันเป็นค่าเริ่มต้นที่ดีกว่า ไม่จำเป็นต้องมีทั้งคู่ทำlist(range)ถ้าคุณต้องการรายการจริงๆ .
rangeใน Python 3.xxrangeมาจาก Python 2.x ในความเป็นจริงแล้ว Python 2.xrangeถูกลบไปแล้ว