มุมมองช่วยให้คุณเข้าถึงโครงสร้างข้อมูลที่อยู่ภายใต้โดยไม่ต้องคัดลอก นอกเหนือจากการเป็นแบบไดนามิกซึ่งต่างจากการสร้างรายการหนึ่งในการใช้งานที่มีประโยชน์ที่สุดคือin
การทดสอบ สมมติว่าคุณต้องการตรวจสอบว่าค่าอยู่ใน dict หรือไม่ (ไม่ว่าจะเป็นคีย์หรือค่า)
ตัวเลือกที่หนึ่งคือการสร้างรายการคีย์ที่ใช้dict.keys()
งานได้ แต่เห็นได้ชัดว่าต้องใช้หน่วยความจำมากขึ้น ถ้า dict มีขนาดใหญ่มาก? นั่นจะสิ้นเปลือง
ด้วยviews
คุณสามารถทำซ้ำโครงสร้างข้อมูลจริงโดยไม่ต้องรายการกลาง
ลองใช้ตัวอย่าง ฉันเขียนตามตัวเลขและสตริงแบบสุ่ม 1,000 คีย์และk
เป็นกุญแจที่ฉันต้องการค้นหา
large_d = { .. 'NBBDC': '0RMLH', 'E01AS': 'UAZIQ', 'G0SSL': '6117Y', 'LYBZ7': 'VC8JQ' .. }
>>> len(large_d)
1000
# this is one option; It creates the keys() list every time, it's here just for the example
timeit.timeit('k in large_d.keys()', setup='from __main__ import large_d, k', number=1000000)
13.748743600954867
# now let's create the list first; only then check for containment
>>> list_keys = large_d.keys()
>>> timeit.timeit('k in list_keys', setup='from __main__ import large_d, k, list_keys', number=1000000)
8.874809793833492
# this saves us ~5 seconds. Great!
# let's try the views now
>>> timeit.timeit('k in large_d.viewkeys()', setup='from __main__ import large_d, k', number=1000000)
0.08828549011070663
# How about saving another 8.5 seconds?
อย่างที่คุณเห็นview
วัตถุวนซ้ำนั้นช่วยเพิ่มประสิทธิภาพได้อย่างมากลดค่าใช้จ่ายหน่วยความจำในเวลาเดียวกัน คุณควรใช้พวกเขาเมื่อคุณต้องการดำเนินการSet
เช่นการดำเนินการ
หมายเหตุ : ฉันกำลังใช้งาน Python 2.7