จากเอกสาร :
กลับรายการ ( seq )
iterator
กลับย้อนกลับ seq ต้องเป็นวัตถุที่มี__reversed__()
วิธีการหรือสนับสนุนโปรโตคอลลำดับ ( __len__()
วิธีการและ__getitem__()
วิธีการที่มีอาร์กิวเมนต์จำนวนเต็มเริ่มต้นที่ 0)
วัตถุไม่ใช้dict
__reversed__
มันใช้ทั้งสองวิธีหลัง อย่างไรก็ตาม__getitem__
รับคีย์เป็นอาร์กิวเมนต์แทนที่จะเป็นจำนวนเต็ม (เริ่มต้นที่ 0)
ว่าทำไมนี้ได้รับการแนะนำและพูดคุยกันที่นี่
แก้ไข:
เครื่องหมายคำพูดเหล่านี้มาจากรายชื่อผู้รับจดหมายของ Python-Dev (เธรด "เพิ่ม __reversed__ method for dict", เริ่มต้นที่ 25. 05. 18. ), ฉันจะเริ่มด้วยอาร์กิวเมนต์ "conceptual" อันแรกมาจาก Antoine Pitrou:
ไม่มีอะไรที่คุ้มค่าที่ OrderedDict รองรับการกลับรายการแล้ว () อาร์กิวเมนต์สามารถไปได้ทั้งสองวิธี:
dict คล้ายกับ OrderedDict ทุกวันนี้ดังนั้นจึงควรสนับสนุน reverse () ด้วย;
คุณสามารถใช้ OrderedDict เพื่อส่งสัญญาณอย่างชัดเจนว่าคุณสนใจสั่งซื้อ ไม่จำเป็นต้องเพิ่มอะไรลงไป
ความคิดของฉันคือการรับประกันการแทรกสำหรับ dicts ปกติเป็นแบรนด์ใหม่ดังนั้นจึงต้องใช้เวลาสักครู่สำหรับความคิดที่จะเข้ามาและกลายเป็นส่วนหนึ่งของการคิดทุกวันเกี่ยวกับ dicts เมื่อเกิดเหตุการณ์นี้ขึ้นก็อาจจะหลีกเลี่ยงไม่ได้ที่กรณีการใช้งานจะปรากฏขึ้นและ __ กลับมาจะได้รับการเพิ่มในบางจุด การนำไปปฏิบัติดูเหมือนจะตรงไปตรงมาและการก้าวกระโดดทางแนวคิดไม่มากนักเพื่อคาดหวังว่าคอลเลกชันที่มีคำสั่ง จำกัด จะสามารถย้อนกลับได้
ตามมาด้วยคำตอบของ Raymond Hettinger:
เนื่องจาก dicts ในขณะนี้ติดตามคำสั่งแทรกดูเหมือนว่าเหมาะสมที่จะต้องการทราบการแทรกล่าสุด (เช่นวนลูปมากกว่างานที่เพิ่มล่าสุดในงานเขียนตามคำบอก) กรณีการใช้งานที่เป็นไปได้อื่น ๆ น่าจะสอดคล้องกับวิธีที่เราใช้คำสั่ง Unix tail
หากมีกรณีการใช้งานเกิดขึ้นจะเป็นการดีที่ __reversed__ จะได้รับการสนับสนุนแล้วเพื่อที่คนจะไม่ถูกล่อลวงให้ใช้วิธีแก้ปัญหาที่น่าเกลียดโดยใช้การเรียก popitem () ตามด้วยการเรียกซ้ำ
ความกังวลหลักที่แสดงอยู่ในรายชื่อที่ส่งเป็นที่ว่านี้จะเพิ่มการขยายตัวมากเกินไปหรือลดประสิทธิภาพหน่วยความจำ (ต้องมีรายการที่เชื่อมโยงเป็นทวีคูณแทนคนที่เชื่อมโยงเดี่ยว) ในอย่างน้อยบางส่วนการใช้งานที่นี่เป็นคำพูด Inada Naoki จากงูหลามบั๊ก ( ปัญหา 33462 ):
"มีคำสั่งซื้อ" ไม่ได้แปลว่า "ย้อนกลับได้" ตัวอย่างเช่นมีการเรียงลำดับรายการเชื่อมโยงเดียว แต่ไม่สามารถย้อนกลับได้
ในขณะที่การใช้งาน CPython สามารถให้บริการที่มีประสิทธิภาพ__reverse__
การเพิ่ม__reverse__
หมายถึงการใช้งาน Python ทั้งหมดคาดว่าจะให้มัน ตัวอย่างเช่นการใช้งาน Python บางอย่างอาจใช้ dict ด้วย hashmap + รายการที่ลิงก์เดียว หาก__reverse__
มีการเพิ่มจะไม่สามารถทำได้อีกต่อไป
กลับไปที่รายชื่อผู้รับจดหมายนี่เป็นข้อความสุดท้ายสองข้อความ (ทั้งสองโพสต์เมื่อ 08.06.2018) ที่แรกมาจาก Michael Selik:
ฉันถูกต้องหรือไม่ที่บอกว่าฉันทามติคือ +1 สำหรับรวมไว้ใน v3.8?
จุดสุดท้ายของเธรดคือ INADA Naoki ทำการวิจัยการใช้งานต่าง ๆ และตัดสินใจว่ามันใช้ได้ที่จะรวมคุณสมบัตินี้ไว้ใน 3.8 เมื่อฉันเข้าใจแล้ว Guido ก็เห็นด้วยกับคำแนะนำของ INADA เพื่อรอการใช้งาน v3.7 ของ MicroPython เนื่องจาก INADA เปลี่ยนใจฉันจึงเดาว่าทั้งหมดนี้เป็นของกำนัล?
สรุปข้อความของ Guido van Rossum:
นั่นฟังดูเหมาะสมสำหรับฉัน จากนั้นเราจะมีสองเวอร์ชันซึ่งเป็นกรณีนี้:
ตามที่ระบุไว้ในคำตอบและความคิดเห็นอื่น ๆreversed()
รองรับทั้ง dicts และ dictviews ตั้งแต่รุ่น 3.8 (14.10.2018)
dict
วัตถุปกติ(อย่างน้อยก็ไม่รับประกันจากภาษา) ดังนั้นจึงreversed
ไม่มีเหตุผล