Nếu bạn sử dụng, any(lst)bạn thấy đó lstlà có thể lặp lại, đó là danh sách một số mục. Nếu nó chứa [0, False, '', 0.0, [], {}, None](tất cả đều có giá trị boolean False) thì any(lst)sẽ là False. Nếu lstcũng chứa bất kỳ điều nào sau đây [-1, True, "X", 0.00001](tất cả đều đánh giá đến True) thì any(lst)sẽ là True.
Trong mã bạn đã đăng, x > 0 for x in lstđây là một loại khác có thể lặp lại, được gọi là biểu thức trình tạo . Trước khi biểu thức máy phát điện đã được thêm vào Python, bạn đã có thể tạo ra một sự hiểu biết danh sách , trông rất giống nhau, nhưng với xung quanh []'s: [x > 0 for x in lst]. Từ lstchứa [-1, -2, 10, -4, 20], bạn sẽ có được điều này danh sách thấu hiểu : [False, False, True, False, True]. Giá trị nội bộ này sau đó sẽ được chuyển đến anyhàm, giá trị này sẽ trả về True, vì có ít nhất một Truegiá trị.
Nhưng với biểu thức trình tạo , Python không còn phải tạo danh sách nội bộ đó True(s)và False(s), các giá trị sẽ được tạo khi anyhàm lặp qua các giá trị được tạo lần lượt bởi biểu thức trình tạo. Và , vì anyngắn mạch, nó sẽ ngừng lặp lại ngay khi nhìn thấy Truegiá trị đầu tiên . Điều này sẽ đặc biệt hữu ích nếu bạn đã tạo lstbằng cách sử dụng thứ gì đó như lst = range(-1,int(1e9))(hoặc xrangenếu bạn đang sử dụng Python2.x ). Mặc dù biểu thức này sẽ tạo ra hơn một tỷ mục nhập, nhưng anychỉ phải đi xa đến mục nhập thứ ba khi nó đến 1, đánh giá Truecho x>0và vì vậy anycó thể trả về True.
Nếu bạn đã tạo danh sách dễ hiểu , trước tiên Python sẽ phải tạo danh sách tỷ phần tử trong bộ nhớ, sau đó chuyển nó vào any. Nhưng bằng cách sử dụng một biểu thức trình tạo , bạn có thể có các hàm nội trang của Python giống như anyvà allđột phá sớm, ngay sau khi một Truehoặc Falsegiá trị được nhìn thấy.
any(x > 0 for x in list)chỉ là một cú pháp đường choany((x > 0 for x in list)).