เมื่อเร็ว ๆ นี้ฉันเริ่มใช้ 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
ถูกลบไปแล้ว