10
ทำไม“ 1000000000000000 ในช่วง (1000000000000001)” เร็วมากใน Python 3
ฉันเข้าใจว่าrange()ฟังก์ชั่นซึ่งจริงๆแล้วเป็นประเภทวัตถุใน Python 3สร้างเนื้อหาในทันทีคล้ายกับเครื่องกำเนิด นี่เป็นกรณีที่ฉันคาดว่าบรรทัดต่อไปนี้จะใช้เวลามากเกินไปเพราะในการพิจารณาว่า 1 quadrillion อยู่ในช่วงหรือไม่ต้องสร้างค่า quadrillion: 1000000000000000 in range(1000000000000001) ยิ่งกว่านั้น: ดูเหมือนว่าไม่ว่าฉันจะเพิ่มศูนย์เป็นจำนวนเท่าใดการคำนวณมากหรือน้อยก็ใช้เวลาเท่ากัน ฉันได้ลองสิ่งนี้เช่นกัน แต่การคำนวณก็ยังเกือบจะทันที: 1000000000000000000000 in range(0,1000000000000000000001,10) # count by tens ถ้าฉันพยายามที่จะใช้ฟังก์ชั่นพิสัยของตัวเองผลที่ออกมาไม่ค่อยดีเท่าไหร่ !! def my_crappy_range(N): i = 0 while i < N: yield i i += 1 return อะไรคือสิ่งที่range()วัตถุที่ทำภายใต้ประทุนที่ทำให้มันอย่างรวดเร็ว? คำตอบ Martijn Pieters'ได้รับเลือกเพื่อความสมบูรณ์ของมัน แต่ยังเห็นคำตอบแรก abarnert ของสำหรับการสนทนาที่ดีของสิ่งที่มันหมายถึงการrangeที่จะเป็นที่เต็มเปี่ยมลำดับในหลาม 3 และข้อมูลบางส่วน / คำเตือนเกี่ยวกับความไม่ลงรอยกันศักยภาพในการ__contains__เพิ่มประสิทธิภาพการทำงานข้ามการใช้งานหลาม …