timeit.Timer()関数にパラメータを渡すことでトリッキーPythonの文字列リテラル

StackOverflow https://stackoverflow.com/questions/386664

  •  23-08-2019
  •  | 
  •  

質問

私は、Pythonのtimeit.Timer(stmtは、setup_stmt)でセットアップ文で苦労しています。私はこのトリッキーな問題のうち、私を取得するために、任意の助けを感謝します:

だから私のsnipletは次のようになります:

def compare(string1, string2):
    # compare 2 strings

if __name__ = '__main__':
    str1 = "This string has \n several new lines \n in the middle"
    str2 = "This string hasn't any new line, but a single quote ('), in the middle"

    t = timeit.Timer('compare(p1, p2)', "from __main__ import compare; p1=%s, p2=%s" % (str1,str2))

私はセットアップ文でその意味を変えずにSTR2、変数STR1でメタ文字をエスケープする方法がわからない。

"from __main__ import compare; p1=%s, p2=%s" % (str1,str2)

私は、様々な組み合わせを試してみましたが、常に次のエラーを持っています: SyntaxError:リテラル
に割り当てることはできません。 SyntaxError:EOL単一引用符で囲まれた文字列を走査しながら、
SyntaxError:無効な構文

役に立ちましたか?

解決

の代替としてこれを考えてみます。

t = timeit.Timer('compare(p1, p2)', "from __main__ import compare; p1=%r; p2=%r" % (str1,str2))

%rは、Pythonは常に引用し、正しくエスケープ文字列のためのreprを使用します。

EDIT:セミコロンにカンマを変更することにより、固定コード;エラーが今なくなっています。

他のヒント

なぜですべての文字列を引用わざわざ?ただ、直接それらを使用しています。 すなわち。あなたの最後の行を変更します:

t = timeit.Timer('compare(str1, str2)', "from __main__ import compare, str1, str2")
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top