2017-06-06 18 views
0

私はPython 3.6でJupyterノートブックを使用していました。簡単なテストのためにできるだけ簡単な方法でtimeit()を使用したい場合、ほとんどの場合、セルの唯一の行として使用して関数呼び出しを入れると、次のように動作します。Jupyterノートブックのtimeit()の矛盾

timeit(raiseTo600(6623)) 

コマンドと同じセル内にコメントとしてそんなに入れた場合は、関数が呼び出されている理由ですが、前のセルに定義されているエラー、(同じセルをintそれを置くを取得しますエラーが発生します)。

この動作(動作する)でさえ、100%一貫していません。ランダムにエラーが発生し、それらをクリアするには、カーネルを再起動する必要があります。

timeit()(引用符で囲まれた複数行のコード)内の複数の関数呼び出しを受け入れたオンラインの例を見てきました。私はコードにコメントを入れたいと思っていました。コメントと一緒にエラーが発生するので、timeitが認識されない、つまりimportステートメントを含めたエラーが修正されてしまうと思っていました。しかし、再び、このトリガーエラーを行うにしようとします。

コード:

from timeit import timeit 
timeit(raiseTo600(6623)) 

出力:

ValueError: stmt is neither a string nor callable 

は引用符でそれを置くことは、関数が前のセルで実行されていても、このエラーを生成していますうまく動作します。改訂コード:

from timeit import timeit 
timeit('raiseTo600(6623)') 

出力:

NameError: name 'raiseTo600' is not defined 

これは、使用するのは簡単でなければなりません。ここで何がうまくいかないのですか?

私は複数の機能でこれをテストし、同じ症状を得て、完全を期すために、ここで私はtimeit()が働いていなかった理由だけで振るために使用しようとしたシンプルなものがあるしている:

def raiseTo600(x): 
    return x**600 

答えて

0

Jupyter以内ノートPCは、それはビルトイン%%timeit魔法を使用するのが最善です:

In [1]: 
     %%timeit -n 1000 def raiseTo600(x): return x**600 
     raiseTo600(6623) 

Out [1]: 
     7.59 µs ± 699 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each) 

セルの最初の行が実行されますが、時間指定されていません。 timeitのフラグを設定したり、セットアップコード(関数の定義など)を実行することができます。次に、セルの本体がループされ、タイミングがとられます。Jupyter docsから

:ラインモードで

%はtimeit時間Pythonの文の実行または式

使用法、:

%のはtimeit [-n -r [-t | -c] -q -p -o]文

またはセルモード:

%%はtimeit [-n -r [-t | -c] -q -p -o]のsetup_code

コード

コード...

時間の実行timeitモジュールを使用するPythonの文または式。この関数は、ラインとセルのマジックの両方として使うことができます:

ラインモードでは、1行のステートメントを実行することができます(複数のステートメントはセミコロンで連鎖できます)。 セルモードでは、最初の行のステートメントはセットアップコードとして使用され(実行されますが、時間切れではありません)、セルの本体がタイムアウトします。セル本体は、セットアップコードで作成された変数にアクセスできます。