14

私は非常に基本的なものを欠いています。

class C:
    def __init__(self):
        self.N = 100
        pass

    def f(self, param):
        print 'C.f -- param'
        for k in xrange(param):
            for i in xrange(self.N):
                for j in xrange(self.N):
                    a = float(i)/(1+float(j)) + float(i/self.N) ** float(j/self.N)

import cProfile

c = C()
cProfile.run('c.f(3)')

上記のコードを IPython で実行すると、次のようになります。

NameError: name 'c' is not defined

私は何が欠けていますか?

私のセッションの正確なペーストを更新してください: http://pastebin.com/f3e1b9946

更新問題がIPythonで発生することは言及しませんでした。これが(判明した場合)問題の原因です

4

3 に答える 3

26

IPython 内では、 %prun マジック関数を使用できます。

In [9]: %prun c.f(3)
C.f -- param
         3 function calls in 0.066 CPU seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.066    0.066    0.066    0.066 <string>:6(f)
        1    0.000    0.000    0.066    0.066 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
于 2009-11-30T17:13:48.197 に答える
16

元の投稿者の問題ではありませんが、__main__ 名前空間以外で (関数またはインポート内から) cProfile.run() を呼び出すと、この同じエラーが発生する可能性があります。その場合、run() メソッドの代わりに以下を使用する必要があります。

cProfile.runctx("your code", globals(), locals())

これを理解するのを手伝ってくれたこの投稿を称賛します。

于 2010-07-22T03:46:58.197 に答える
3

IPython は非常に便利ですが、動作中のコードを壊したり、エラーを隠したりするまれなケースがたくさんあります。そのため、このような不思議なエラーが発生した場合は、標準のインタープリターでコードを試すと便利です。

于 2009-11-30T16:56:32.093 に答える