* คือโอเปอเรเตอร์ "splat": ใช้รายการเป็นอินพุตและขยายเป็นอาร์กิวเมนต์ตำแหน่งจริงในการเรียกใช้ฟังก์ชัน
ถ้าuniqueCrossTabsเป็น[ [ 1, 2 ], [ 3, 4 ] ]เช่นนั้นitertools.chain(*uniqueCrossTabs)ก็เหมือนกับที่พูดitertools.chain([ 1, 2 ], [ 3, 4 ])
uniqueCrossTabsนี้จะเห็นได้ชัดที่แตกต่างจากที่ผ่านในเวลาเพียง ในกรณีของคุณคุณมีรายการที่คุณต้องการจะแบน อะไรitertools.chain()ส่งคืนตัววนซ้ำในการต่อกันของอาร์กิวเมนต์ตำแหน่งทั้งหมดที่คุณส่งผ่านไปยังอาร์กิวเมนต์ตำแหน่งแต่ละอาร์กิวเมนต์สามารถทำซ้ำได้ในสิทธิของตัวเอง
กล่าวอีกนัยหนึ่งคือคุณต้องการส่งผ่านแต่ละรายการuniqueCrossTabsเป็นอาร์กิวเมนต์chain()ซึ่งจะรวมเข้าด้วยกัน แต่คุณไม่มีรายการในตัวแปรแยกต่างหากดังนั้นคุณจึงใช้*โอเปอเรเตอร์เพื่อขยายรายการของรายการเป็นอาร์กิวเมนต์หลายรายการ
ดังที่ Jochen Ritzel ได้ชี้ให้เห็นในความคิดเห็นchain.from_iterable()นั้นเหมาะสมกว่าสำหรับการดำเนินการนี้เนื่องจากถือว่าการทำซ้ำเพียงครั้งเดียวเริ่มต้นด้วย จากนั้นรหัสของคุณจะกลายเป็น:
uniqueCrossTabs = list(itertools.chain.from_iterable(uniqueCrossTabs))