Pythonコンソールで、次のように入力すると:
>>> "\n".join(['I', 'would', 'expect', 'multiple', 'lines'])
与える:
'I\nwould\nexpect\nmultiple\nlines'
私はそのような出力を見ることを期待していますが:
I
would
expect
multiple
lines
ここで何が欠けていますか?
コンソールは、文字列自体ではなく、表現を出力しています。
プレフィックスを付けるとprint
、期待どおりの結果が得られます。
文字列と文字列の表現の違いの詳細については、この質問を参照してください。非常に単純化された表現は、その文字列を取得するためにソースコードに入力するものです。
あなたは結果を忘れましprint
た。得られるのは、実際の印刷結果ではなく、P
インです。RE(P)L
Py2.xでは、次のようになります。
>>> print "\n".join(['I', 'would', 'expect', 'multiple', 'lines'])
I
would
expect
multiple
lines
Py3.Xでは、printは関数なので、次のようにする必要があります。
print("\n".join(['I', 'would', 'expect', 'multiple', 'lines']))
さて、それは短い答えでした。実際にはREPLであるPythonインタープリターは、実際に表示される出力ではなく、常に文字列の表現を表示します。表現はあなたがrepr
ステートメントで得るものです
>>> print repr("\n".join(['I', 'would', 'expect', 'multiple', 'lines']))
'I\nwould\nexpect\nmultiple\nlines'
print
その出力を取得する必要があります。
やったほうがいい
>>> x = "\n".join(['I', 'would', 'expect', 'multiple', 'lines'])
>>> x # this is the value, returned by the join() function
'I\nwould\nexpect\nmultiple\nlines'
>>> print x # this prints your string (the type of output you want)
I
would
expect
multiple
lines
あなたはそれを印刷する必要があります:
In [22]: "\n".join(['I', 'would', 'expect', 'multiple', 'lines'])
Out[22]: 'I\nwould\nexpect\nmultiple\nlines'
In [23]: print "\n".join(['I', 'would', 'expect', 'multiple', 'lines'])
I
would
expect
multiple
lines
これで印刷すると、次のprint 'I\nwould\nexpect\nmultiple\nlines'
ようになります。
I
would
expect
multiple
lines
は\n
、END-OF-TEXTをマークするために特別に使用される改行文字です。行またはテキストの終わりを示します。この特性は、C、C++などの多くの言語で共有されています。
repr()関数は、指定されたオブジェクトの印刷可能な表現を返し、PythonのevalStr()またはexecにとって重要です。たとえば、PythonのZenを取得したい場合:
eng.execString('from this import *');
println('import this:'+CRLF+
stringReplace(eng.EvalStr('repr("".join([d.get(c,c) for c in s]))'),'\n',CRLF,[rfReplaceAll]));