myList = [4, 4, 9, 12]
if not any(isPrime(x) for x in myList):
print("The list did not contain a prime")
अजगर भी all()
जो किसी भी अनुक्रम के माध्यम से क्रैंक और True
लौटाता है यदि सभी तत्वों को सच का मूल्यांकन है।
any()
और all()
दोनों शॉर्ट सर्किट मूल्यांकन है: अगर any()
किसी भी तत्व यह सच का मूल्यांकन करता है पाता है, यह बंद हो जाता है और True
रिटर्न; और यदि all()
कोई तत्व है जो गलत मूल्यांकन करता है, तो यह बंद हो जाता है और False
देता है।
दोनों "आलसी" हैं कि वे एक समय में मूल्यों को खींचने के लिए पायथन पुनरावृत्ति का उपयोग करते हैं। उदाहरण के लिए:
import random
def rand_sequence(n_max):
while True:
next_random = random.randint(0, n_max)
print(next_random)
yield next_random
all(isPrime(x) for x in rand_sequence(20))
इस पुनरावृति जाएगा, जब तक एक गैर अभाज्य संख्या में पाया जाता है, तो वापसी False
। यह संख्याओं को साइड इफेक्ट के रूप में प्रिंट करता है ताकि आप इसे काम देख सकें। मैंने बस कोशिश की और मिला:
17
3
0
पीएस मैं एक पायथन सम्मेलन में एक वार्ता में गया, और स्पीकर ने उल्लेख किया कि वह आमतौर पर any()
का उपयोग लूप करने के लिए एक बहुत ही कुशल तरीका के रूप में करता है। एक for
लूप प्रत्येक लूप के लिए लूप वैरिएबल को फिर से बांधता है, लेकिन any()
ऐसा नहीं करता है; यह सिर्फ मूल्यों की जांच करता रहता है। इसलिए यदि आप any()
का उपयोग ऐसे फ़ंक्शन के साथ करते हैं जो हमेशा None
या झूठा मान देता है, तो यह अनुक्रम के अंत तक अपने रास्ते को फिर से चालू कर देगा, और उस लड़के के अनुसार, यह पाइथन में ऐसा करने का सबसे तेज़ तरीका है। (और यदि आपका फ़ंक्शन एक मान देता है जो None
नहीं है और यह गलत नहीं है, तो आप उसी चाल के लिए all()
का उपयोग कर सकते हैं। केवल एक बार यह काम नहीं करता है अगर कभी-कभी फ़ंक्शन एक वास्तविक मान देता है और कभी-कभी यह झूठा देता है । मूल्य लेकिन आप इसे मजबूर कर सकते हैं हमेशा काम करने के लिए:
any(my_function(x) and False for x in sequence)
पी पी एस के all()
isPrime()
के पुनर्लेखन के लिए उपयोग करते हैं मैं पीईपी 8. http://www.python.org/dev/peps/pep-0008/
def is_prime(element):
""" just a helper function! don't get religious about it! """
if element == 2:
return True
elif element <= 1 or element % 2 == 0:
return False
else:
return all(element % i for i in xrange(3, element, 2))
के अनुरूप
is_prime()
को नाम बदल देंगे! आप शायद 'तत्व% 2 == 0' से पहले' तत्व == 2' जांचना चाहते हैं; उत्तरार्द्ध हमेशा सत्य होता है जब पूर्व सत्य होता है। – icktoofayधन्यवाद, मैंने इसे सही कर दिया है। लेकिन यह एक ऐसा परिदृश्य बनाने का एक उदाहरण है जहां इसका उपयोग किया जा सकता है। –