何か変なことに気づきました
Pythonでは、これを行うと
>>> k = 1
>>> j = 2
>>> print k,",",j
1 , 2 # prints this
私はそれが次のようになると思っていました:
1,2
なぜこれら2つの間にスペースがあるのに
>>> print str(k) + "," + str(j)
1,2
ありがとう
何か変なことに気づきました
Pythonでは、これを行うと
>>> k = 1
>>> j = 2
>>> print k,",",j
1 , 2 # prints this
私はそれが次のようになると思っていました:
1,2
なぜこれら2つの間にスペースがあるのに
>>> print str(k) + "," + str(j)
1,2
ありがとう
最初の例では、3 つの引数を にprint
直接渡します。次に、それらを文字列に変換し、スペースで区切って連結します。2 番目の例では、最初に文字列を変換して連結し、次に文字列全体をprint
単一の引数として に渡します。代わりに実行print str(k), ",", str(j)
すると、最初の例と同じ結果が得られます。
print
キーワードとしてではなく、関数がどのように機能するかという観点から考えてください。例として、次のようにします。
def foo(*args):
return ' '.join(map(str, args))
foo('a', 'b', 'c')
foo の 3 つの引数を渡し、スペースで結合された 3 つの引数を返します'a b c'
。 foo('a' + 'b' + 'c')
最初に string を作成し'abc'
、それを単一の引数として foo に渡すと、foo は だけを返します'abc'
。
それがまさにその通りです。1 つの理由は、おそらくデバッグのためです。世界の他のほとんどの人々と同様に、短い単純なスクリプトprint
を使用するよりも速くて簡単なため、ステートメントを使用してデバッグすることがよくあります。pdb
検討:
a = 1
b = 2
print a,b
これは、 2 つの引数を取得1 2
した行と一致することを明確に示しています。print
(あなたの例ではprint
、最初に 3 つの引数を渡し、2 回目には 1 つだけ渡します)。print a,b
それがあなたに与えた場合、それがどれほど混乱するか想像してみてください12
! a がどこから来たのかを把握しようとして、コード全体を調べることになります12
。もちろん、他の人が指摘しているように、1 つの回避策は、印刷方法についてより厳密な要件がある場合は、文字列の書式設定を使用することです。
他の人が指摘しているように、主な理由はデバッグである可能性があります。その点で、デバッグのために同じ行に複数の値を出力するとどうなるかを見てください。
>>> print myObj1, myObj2
myFirstObj mySecondObj
このように、デバッグ目的で出力する変数の間にスペースを出力する必要がないため、print
この使用法を軽量化できます。
もちろん、他の人が指摘しているように','.join(myListOfStrings)
、文字列のコンマ区切りリストを印刷するために使用する方が良いでしょう