यदि आप उपयोग 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, यह एक अलग प्रकार का चलने योग्य है, जिसे जनरेटर अभिव्यक्ति कहा जाता है । इससे पहले कि जनरेटर भाव अजगर को जोड़ा गया था, तो आप एक बनाया होगा सूची समझ है, जो बहुत समान दिखता है, लेकिन आसपास के साथ []की: [x > 0 for x in lst]। से lstयुक्त [-1, -2, 10, -4, 20], तो आप इस मिलेगा comprehended सूची : [False, False, True, False, True]। यह आंतरिक मान तब anyफ़ंक्शन में पास हो जाता है, जो Trueकम से कम एक Trueमान होता है।
लेकिन साथ जनरेटर भाव , अजगर नहीं रह गया है की है कि आंतरिक सूची बनाने के लिए है True(s)और False(s)मूल्यों के रूप में उत्पन्न हो जाएगा, anyजनरेटर अभिव्यक्ति द्वारा एक समय में एक उत्पन्न मूल्यों के माध्यम से समारोह दोहराता। और , anyशॉर्ट-सर्किट के बाद से , जैसे ही यह पहला Trueमूल्य देखता है, यह चलना बंद कर देगा । यह विशेष रूप से आसान होगा यदि आपने lstकुछ का उपयोग करके बनाया lst = range(-1,int(1e9))(या xrangeयदि आप Python2.x का उपयोग कर रहे हैं )। भले ही यह अभिव्यक्ति एक अरब से अधिक प्रविष्टियों को उत्पन्न करेगी, anyकेवल तीसरी प्रविष्टि के रूप में दूर तक जाना होगा जब यह हो जाता है 1, जो इसके लिए मूल्यांकन करता Trueहै x>0, और इसलिए anyवापस आ सकता है True।
यदि आपने एक सूची समझ बनाई है , तो पहले पायथन को स्मृति में अरब-तत्व सूची बनाना होगा, और फिर उसे पास करना होगा any। लेकिन एक जनरेटर अभिव्यक्ति का उपयोग करके , आप पाइथन के अंतर्निहित कार्यों को पसंद कर सकते हैं anyऔर जैसे allही Trueया एक Falseमूल्य देखा जाता है , जल्दी से तोड़ सकते हैं ।
any(x > 0 for x in list)सिर्फ एक चीनी के लिए चीनी हैany((x > 0 for x in list))।