Depset

โครงสร้างข้อมูลเฉพาะที่รองรับการผสานอย่างมีประสิทธิภาพและมีลำดับการข้ามที่กำหนดไว้ ใช้กันโดยทั่วไปเพื่อสะสมข้อมูลจากการพึ่งพิงแบบส่งผ่านในกฎและแง่มุมต่างๆ ดูข้อมูลเพิ่มเติมที่ นี่

องค์ประกอบของ depset ต้องเป็นแบบแฮชได้และเป็นประเภทเดียวกันทั้งหมด (ตามที่กำหนดโดยฟังก์ชัน type(x) ในตัว) แต่ depset ไม่ใช่ชุดแฮชธรรมดาและไม่รองรับการทดสอบการเป็นสมาชิกอย่างรวดเร็ว หากต้องการประเภทข้อมูลชุดทั่วไป คุณสามารถจำลองได้โดยใช้พจนานุกรมที่คีย์ทั้งหมดแมปกับ True

Depset เปลี่ยนแปลงไม่ได้ ควรสร้างโดยใช้ ฟังก์ชันตัวสร้าง และผสานหรือเพิ่มด้วย depset อื่นๆ ผ่านอาร์กิวเมนต์ transitive

พารามิเตอร์ order จะกำหนดประเภทการข้ามที่ทำเพื่อแปลง depset เป็น iterable โดยมีค่าที่เป็นไปได้ 4 ค่า ดังนี้

  • "default" (เดิมชื่อ "stable"): ไม่ได้ระบุลำดับ (แต่กำหนดได้)
  • "postorder" (เดิมชื่อ "compile"): การจัดลำดับหลังแบบจากซ้ายไปขวา กล่าวคือ จะข้ามองค์ประกอบย่อยทั้งหมดแบบซ้ำๆ โดยเริ่มจากซ้ายสุดก่อน แล้วจึงข้ามองค์ประกอบโดยตรงแบบซ้ายสุดก่อน
  • "preorder" (เดิมชื่อ "naive_link"): การจัดลำดับก่อนแบบจากซ้ายไปขวา กล่าวคือ จะข้ามองค์ประกอบโดยตรงแบบซ้ายสุดก่อน แล้วจึงข้ามองค์ประกอบย่อยแบบซ้ำๆ โดยเริ่มจากซ้ายสุดก่อน
  • "topological" (เดิมชื่อ "link"): การจัดลำดับโทโพโลยีจากรูทลงไปที่ลีฟ ไม่มีการรับประกันแบบจากซ้ายไปขวา

คุณจะผสาน depset 2 รายการได้ก็ต่อเมื่อ depset ทั้ง 2 รายการมีลำดับเดียวกัน หรือ depset รายการใดรายการหนึ่งมีลำดับ "default" ในกรณีหลังนี้ ลำดับของ depset ที่ได้จะเป็นลำดับเดียวกับลำดับของ depset อีกรายการ

Depset อาจมีค่าที่ซ้ำกัน แต่ระบบจะระงับค่าเหล่านี้เมื่อวนซ้ำ (โดยใช้ to_list()) ค่าที่ซ้ำกันอาจรบกวนความหมายของการจัดลำดับ

สมาชิก

to_list

list depset.to_list()

แสดงผลรายการองค์ประกอบโดยไม่มีรายการที่ซ้ำกันตามลำดับการข้ามของ depset โปรดทราบว่าไม่ได้ระบุลำดับ (แต่กำหนดได้เชิงกำหนด) สำหรับองค์ประกอบที่เพิ่มลงใน depset มากกว่า 1 ครั้ง นอกจากนี้ ยังไม่ได้ระบุลำดับสำหรับ depset ที่จัดลำดับ "default" และสำหรับองค์ประกอบของ depset ย่อยที่มีลำดับแตกต่างจาก depset ระดับบนสุด รายการนี้เป็นสำเนา การแก้ไขรายการนี้จะไม่มีผลกับ depset และในทางกลับกัน