หากคุณใช้any(lst)คุณจะเห็นว่าlstสามารถทำซ้ำได้ซึ่งเป็นรายการของบางรายการ ถ้ามันมีอยู่[0, False, '', 0.0, [], {}, None](ซึ่งทุกคนมีค่าบูลีนของFalse) แล้วจะเป็นany(lst) Falseหากlstยังมีการใด ๆ ต่อไปนี้[-1, True, "X", 0.00001](ทั้งหมดที่ประเมินTrue) แล้วจะเป็นany(lst)True
ในโค้ดที่คุณโพสต์x > 0 for x in lstนี่เป็นประเภทที่สามารถทำซ้ำได้ซึ่งเรียกว่านิพจน์ตัวสร้าง ก่อนที่จะแสดงออกกำเนิดที่ถูกเพิ่มเข้าหลามคุณจะได้สร้างความเข้าใจในรายชื่อซึ่งมีลักษณะคล้ายกันมาก แต่มีรอบ's:[] [x > 0 for x in lst]จากlstที่มี[-1, -2, 10, -4, 20]คุณจะได้รับนี้รายการเข้าใจ[False, False, True, False, True] : จากนั้นค่าภายในนี้จะถูกส่งผ่านไปยังanyฟังก์ชันซึ่งจะส่งกลับTrueเนื่องจากมีTrueค่าอย่างน้อยหนึ่งค่า
แต่ด้วยนิพจน์ตัวสร้าง Python ไม่จำเป็นต้องสร้างรายการภายในนั้นอีกต่อไปTrue(s)และFalse(s)ค่าจะถูกสร้างขึ้นเมื่อanyฟังก์ชันวนซ้ำผ่านค่าที่สร้างขึ้นทีละรายการโดยนิพจน์ตัวสร้าง และเนื่องจากanyการลัดวงจรมันจะหยุดการทำซ้ำทันทีที่เห็นTrueค่าแรก สิ่งนี้จะเป็นประโยชน์อย่างยิ่งหากคุณสร้างlstโดยใช้สิ่งต่างๆเช่นlst = range(-1,int(1e9))(หรือxrangeถ้าคุณใช้Python2.x ) แม้ว่าการแสดงออกนี้จะสร้างกว่าพันล้านรายการanyเท่านั้นที่มีการไปเท่าที่เป็นรายการที่สามเมื่อได้รับไป1ซึ่งประเมินTrueสำหรับx>0และเพื่อให้สามารถกลับมาanyTrue
หากคุณได้สร้างความเข้าใจในรายชื่อ , Python anyจะเป็นครั้งแรกที่ได้มีการสร้างรายการพันล้านองค์ประกอบในหน่วยความจำแล้วผ่านที่ แต่ด้วยการใช้นิพจน์ตัวสร้างคุณสามารถมีฟังก์ชัน builtin ของ Python เช่นanyและallแยกออกก่อนได้ทันทีที่เห็น a TrueหรือFalseค่า
any(x > 0 for x in list)any((x > 0 for x in list))