2013-09-03 8 views
5

私が試していたpython -mtimeitだからpython -mtimeit "n = 0; while n < 10: pass" 無効な構文エラーが表示されました。セミコロンとforループと同じです。Pythonのコマンドライン引数セミコロンループエラー

しかし、私はセミコロンとループを個別に試みます。どちらもうまくいった。

python -c "for i in range(10): print(n)" 
python -c "n = 1; n = 2; print(n)" 

なぜこれが問題なのですか?ループインタイムでどのようにテストできますか?どうもありがとうございました!

+0

'python -mtimeit -c" n = 1; n = 2; print(n) "'? –

+0

あまりにも謝罪する必要はありません! –

答えて

9

whileforは前にセミコロンていないことができ、これらは1行にする必要があります。あなたはPython grammar見た場合:

compound_stmt ::= if_stmt 
        | while_stmt 
        | for_stmt 
        | try_stmt 
        | with_stmt 
        | funcdef 
        | classdef 
        | decorated 
suite   ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT 
statement  ::= stmt_list NEWLINE | compound_stmt 
stmt_list  ::= simple_stmt (";" simple_stmt)* [";"] 

をあなたはcompound_stmtの一部である文が1つのだけで1行である必要があることでしょう。セミコロンによって分離することができる唯一の文がsimple_stmtグループされています。時間にセットアップコードとコード:

simple_stmt ::= expression_stmt 
       | assert_stmt 
       | assignment_stmt 
       | augmented_assignment_stmt 
       | pass_stmt 
       | del_stmt 
       | print_stmt 
       | return_stmt 
       | yield_stmt 
       | raise_stmt 
       | break_stmt 
       | continue_stmt 
       | import_stmt 
       | global_stmt 
       | exec_stmt 
1

スクリプトで書いているのであれば、実際のP​​ythonプログラムでそれをインデントしてみてください。このように:

python -mtimeit " 
n = 0 
while n < 10: 
    pass" 
2

timeitは、2つのパラメータを取ることができます。

python -mtimeit "n = 0" "while n < 10: pass" 

また、あなたはそのpassn += 1に変更する必要があるか、無限ループになります。

+0

'timeit'は1つの引数で[細かく]動作します(http://docs.python.org/2/library/timeit.html#command-line-interface)。問題は構文の1つです。 – Cairnarvon

+0

@Cairnarvon:OPが与えた1つの議論では明らかにうまく機能しませんが、私が与えた2つの議論形式ではうまくいきます。良い仕事、実際に問題を解決した唯一の答えを投票すること。 –

+0

あなたの答えは何の問題も解決しません。なぜなら、質問のポイントを逃してしまうからです。問題は 'timeit'がオプションで複数の引数をとることはできず、厳密には' timeit'を厳密にとらえることではありません。他の2つの答えは、適切な解答と実際の問題の説明を与える。 – Cairnarvon

0

選択答えが見事理由ではなく、(Windowsのcmdは複数行のステートメントを許可していないので)、これは、任意のオペレーティングシステムの下で回避することができる方法の問題に取り組む

答えは:execの

実行文にループをネストする必要があります。

例: (パイソン2)

python -c "i = 3; while i:print i; i-=1" 

正しく動作

python -c "i = 3; exec 'while i:print i;i-=1'" 

ながら、構文エラーです。

関連する問題