2012-04-12 21 views
7

का उपयोग नहीं किया मैं निम्नलिखित कोड का निष्पादन गति को मापने के लिए करना चाहते हैं:टाइमिट, नाम त्रुटि: वैश्विक नाम परिभाषित नहीं किया गया है। लेकिन मैं एक वैश्विक चर

def pe1(): 
    l = [] 
    for i in range(1000): 
     if i%3 == 0 or i%5 == 0: 
      l.append(i) 
    print sum(l) 

मैं pe1m.py के तहत इस कोड संग्रहीत। अब मैं पाइथन दुभाषिया के साथ फ़ाइल की गति का परीक्षण करना चाहता हूं। मैंने किया था:

import timeit 
import pe1m 

t = timeit.Timer(stmt = 'pe1m.pe1()') 
t.timeit() 

लेकिन मैं मिलता है:

File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/timeit.py", line 195, in timeit 
    timing = self.inner(it, self.timer) 
    File "<timeit-src>", line 6, in inner 
NameError: global name 'pe1m' is not defined 

लेकिन मैं किसी भी वैश्विक चर नहीं है।

+0

जब आप मॉड्यूल आयात कर रहे हैं की कोशिश कर सकते हैं, वहाँ एक बयान है। – hjpotter92

+0

[वैश्विक नाम 'foo' प्राप्त करने का संभावित डुप्लिकेट "पायथन के समय के साथ परिभाषित नहीं किया गया है] (https://stackoverflow.com/questions/551797/getting-global-name-foo-is-not-defined-with-pythons -टाइमिट) – sds

उत्तर

13

इस प्रयास करें:

t = timeit.Timer(stmt='pe1()', setup='from pe1m import pe1') 

timeit.Timer वस्तु नाम स्थान आप तो यह pe1m मॉड्यूल है कि आप आयातित उपयोग नहीं कर सकते में यह कॉल कर रहे हैं के बारे में पता नहीं है।

setup तर्क समयबद्ध कथन के संदर्भ में निष्पादित एक बयान है, वे वही नेमस्पेस साझा करते हैं, जो भी आप परिभाषित करते हैं, stmt में पहुंच योग्य होगा। आयात pe1m जो है, imho, कुछ अन्य मॉड्यूल के लिए कोई गलती है:

+0

हां। समय नामस्थान में मॉड्यूल आयात करने के लिए आपको 'सेटअप' की आवश्यकता है - चाहे आप 'से'' या 'pe1m.' का उपयोग करें, कोई मामला या वरीयता है। – agf

+1

जब मैं 't = timeit.Timer (stmt = 'pe1()', setup = 'pe1m import pe1 से') 'फिर' t.timeit()' यह 'pe1m.pe1 के आउटपुट को प्रिंट करने पर रहता है () '(जो 233168 है) असीम रूप से। – Bentley4

+0

@yak अगर आप अपना समाधान अपडेट करते हैं ('t.timeit (संख्या = 1) 'पंक्ति जोड़ें), मैं नीचे अपना उत्तर हटा सकता हूं। –

2

इस

>>>def pe1(): 
>>> l = [] 
>>> for i in range(1000): 
>>>  if i%3 == 0 or i%5 == 0: 
>>>   l.append(i) 
>>> print(sum(l)) 
>>> 
>>>from timeit import time it 
>>>timeit('pe1()',setup="from __main__ import pe1",number=100) # Run 100 times 
>>>timeit('pe1()',setup="from __main__ import pe1") # run default times of 1000000 
संबंधित मुद्दे