Jika Anda menggunakan, any(lst)Anda melihat bahwa lstiterable, yang merupakan daftar beberapa item. Jika itu berisi [0, False, '', 0.0, [], {}, None](yang semuanya memiliki nilai boolean False) maka any(lst)akan False. Jika lstjuga berisi salah satu dari yang berikut [-1, True, "X", 0.00001](semuanya mengevaluasi untuk True) maka any(lst)akan True.
Dalam kode yang Anda posting,, x > 0 for x in lstini adalah jenis iterable yang berbeda, yang disebut ekspresi generator . Sebelum ekspresi Generator ditambahkan ke Python, Anda akan menciptakan pemahaman daftar , yang terlihat sangat mirip, tetapi dengan sekitarnya []'s: [x > 0 for x in lst]. Dari lstmengandung [-1, -2, 10, -4, 20], Anda akan mendapatkan ini daftar dipahami : [False, False, True, False, True]. Nilai internal ini kemudian akan diteruskan ke anyfungsi, yang akan kembali True, karena setidaknya ada satu Truenilai.
Tetapi dengan ekspresi generator , Python tidak lagi harus membuat daftar internal tersebut True(s)dan False(s), nilai akan dihasilkan saat anyfungsi melakukan iterasi melalui nilai yang dihasilkan satu per satu oleh ekspresi generator. Dan , karena anykorsleting, iterasi akan berhenti segera setelah ia melihat nilai pertama True. Ini akan sangat berguna jika Anda membuat lstmenggunakan sesuatu seperti lst = range(-1,int(1e9))(atau xrangejika Anda menggunakan Python2.x ). Meskipun ungkapan ini akan menghasilkan lebih dari satu miliar entri, anyhanya harus pergi sejauh entri ketiga ketika sampai 1, yang mengevaluasi Trueuntuk x>0, dan anydapat kembali True.
Jika Anda telah membuat pemahaman daftar , Python pertama-tama harus membuat daftar miliar elemen di memori, dan kemudian meneruskannya ke any. Tetapi dengan menggunakan ekspresi generator , Anda dapat memiliki fungsi bawaan Python seperti anydan allkeluar lebih awal, segera setelah nilai Trueatau Falseterlihat.
any(x > 0 for x in list)itu hanyalah gula sintaksis untukany((x > 0 for x in list)).