2

何か変なことに気づきました

Pythonでは、これを行うと

>>> k = 1
>>> j = 2
>>> print k,",",j
1 , 2   # prints this

私はそれが次のようになると思っていました:

1,2

なぜこれら2つの間にスペースがあるのに

>>> print str(k) + "," + str(j) 
1,2

ありがとう

4

4 に答える 4

7

最初の例では、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'

于 2012-11-28T21:55:26.520 に答える
2

これprintは、Python 2で機能する方法です。Python3では、印刷はより構成可能です。

あなたが望むことを達成するためのより良い方法は、文字列フォーマットを使用することです:

print '{0},{1}'.format(k, j)

または、古いスタイルの文字列フォーマットを使用します。

print '%d,%d' % (k, j)
于 2012-11-28T21:54:49.187 に答える
2

それがまさにその通りです。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 つの回避策は、印刷方法についてより厳密な要件がある場合は、文字列の書式設定を使用することです。

于 2012-11-28T22:02:16.913 に答える
0

他の人が指摘しているように、主な理由はデバッグである可能性があります。その点で、デバッグのために同じ行に複数の値を出力するとどうなるかを見てください。

>>> print myObj1, myObj2
myFirstObj mySecondObj

このように、デバッグ目的で出力する変数の間にスペースを出力する必要がないため、printこの使用法を軽量化できます。

もちろん、他の人が指摘しているように','.join(myListOfStrings)、文字列のコンマ区切りリストを印刷するために使用する方が良いでしょう

于 2012-11-28T22:14:36.727 に答える