यह ज्यादातर पायथन सीखने में एक अभ्यास है।किसी भी प्रदर्शन()
def p1(n):
for d in xrange(2, int(math.sqrt(n)) + 1):
if n % d == 0:
return False
return True
तब मुझे एहसास हुआ कि मैं आसानी से कर सकते हैं किसी भी() का उपयोग कर इसे फिर से लिखने:
def p2(n):
return not any((n % d == 0) for d in xrange(2, int(math.sqrt(n)) + 1))
अभिनय की दृष्टि से, मैं p2 उम्मीद कर रहा था होना करने के लिए मैं अगर एक नंबर प्रधानमंत्री है परीक्षण करने के लिए इस समारोह में लिखा था की तुलना में, या बहुत कम से कम के रूप में तेजी से के रूप में तेजी से, p1 क्योंकि किसी भी() में निर्मित है, लेकिन एक बड़े ish प्रधानमंत्री के लिए, p2 काफ़ी धीमी है:
$ python -m timeit -n 100000 -s "import test" "test.p1(999983)"
100000 loops, best of 3: 60.2 usec per loop
$ python -m timeit -n 100000 -s "import test" "test.p2(999983)"
100000 loops, best of 3: 88.1 usec per loop
मैं किसी भी (का उपयोग कर रहा है) ठीक से यहाँ ? क्या इस फ़ंक्शन को किसी भी() का उपयोग करके लिखने का कोई तरीका है ताकि यह खुद को पुन: सक्रिय कर सके?
अद्यतन: और भी अधिक बड़ा प्रधानमंत्री
$ python -m timeit -n 1000 -s "import test" "test.p1(9999999999971)"
1000 loops, best of 3: 181 msec per loop
$ python -m timeit -n 1000 -s "import test" "test.p2(9999999999971)"
1000 loops, best of 3: 261 msec per loop
https://docs.python.org/2/library/functions.html#any देखें जो आपने लिखा है उतना ही दिखता है। – njzk2
@ rightføld एक 50% की वृद्धि एक छोटा सा अंतर है? – Barmar
नहीं, लेकिन <1000 पुनरावृत्तियों की एक छोटी संख्या है कि कुछ अतिरिक्त स्टैक फ्रेम (उस समय आपके कंप्यूटर में कहीं और होने वाली सामग्री का उल्लेख नहीं करना) लूप के शरीर की तुलना में अभी भी महत्वपूर्ण हैं। –