timeit.Timer()関数にパラメータを渡すことでトリッキーPythonの文字列リテラル
-
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")
所属していません StackOverflow