จะรับทีละค่าจากฟังก์ชันเครื่องกำเนิดไฟฟ้าใน Python ได้อย่างไร?


113

คำถามพื้นฐานมาก - จะรับค่าหนึ่งจากเครื่องกำเนิดไฟฟ้าใน Python ได้อย่างไร

จนถึงตอนนี้ฉันพบว่าฉันสามารถเขียนgen.next()ได้ ฉันแค่อยากแน่ใจว่านี่เป็นวิธีที่ถูกต้องหรือไม่?

คำตอบ:


154

ใช่หรือnext(gen)ใน 2.6+


3
ฉันรู้ว่านี่เป็นเรื่องน่าอายเพราะเหตุใดจึงไม่ได้ผล W1 = params.next()แต่ได้รับข้อผิดพลาดAttributeError: 'generator' object has no attribute 'next'
Charlie Parker


2
@CharlieParker คุณต้องใช้ Python 3!
Akshay Lokur

66

ใน Python <= 2.5 ให้ใช้gen.next(). สิ่งนี้จะใช้ได้กับ Python 2.x ทุกเวอร์ชัน แต่ไม่ใช่ Python 3.x

ใน Python> = 2.6 ให้ใช้next(gen). นี่คือฟังก์ชันในตัวและชัดเจนกว่า มันจะทำงานใน Python 3 ด้วย

ทั้งสองอย่างนี้ลงท้ายด้วยการเรียกใช้ฟังก์ชันที่มีชื่อพิเศษnext()ซึ่งสามารถแทนที่ได้โดยการคลาสย่อย อย่างไรก็ตามใน Python 3 ฟังก์ชันนี้ถูกเปลี่ยนชื่อเป็นเพื่อ__next__()ให้สอดคล้องกับฟังก์ชันพิเศษอื่น ๆ


16

ใช้ (สำหรับ python 3)

next(generator)

นี่คือตัวอย่าง

def fun(x):
    n = 0
    while n < x:
        yield n
        n += 1
z = fun(10)
next(z)
next(z)

ควรพิมพ์

0
1


2

จะได้รับค่าที่เกี่ยวข้องกับวัตถุกำเนิดไฟฟ้าในหลาม 3 next(<your generator object>)และการใช้งานดังกล่าวข้างต้น การเรียกต่อไปยัง next () จะสร้างค่าอ็อบเจ็กต์ที่ต่อเนื่องกันในคิว


1

ใน python 3 คุณไม่มีgen.next()แต่คุณยังสามารถใช้next(gen)ไฟล์. แปลกนิดหน่อยถ้าคุณถามฉัน แต่มันเป็นอย่างไร


1
ก็ไม่แปลกเท่าไหร่ Python 3 ควรจะทำลายสิ่งต่าง ๆ และอนุญาตเฉพาะโค้ดที่ดีกว่าเท่านั้น การไม่มีความเข้ากันได้แบบย้อนกลับเป็นจุดสำคัญของการเปลี่ยนแปลงบางอย่าง
Tatarize
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.