1

ドキュメントから、 raw_input() は入力から行を読み取り、それを文字列に変換し(末尾の改行を削除)、それを返します。

そのメモで、

a = 'testing: '
sep = '-'
c = raw_input('give me some args: ')          <--- giving 'a b c d'

def wrap( a, sep, *c):
    print a + sep.join(c)

wrap(a, sep, c)

str = 'a b c d'
print sep.join(str)

どちらも同じものを出力するはずですが...

print a + sep.join(c) テストを与えます: abcd
print sep.join(str)a- -b- -c- -dを与えます

sep.join()ラップ関数内で機能しないのはなぜですか?

編集 *c から c に変更しても出力は同じになりますが、*c は引数をアンパックすると思っていたので多少混乱しますが、c を出力すると、文字列 'abc d' と比較して ms ('abc d',) が返されます。ある意味では、アンパックの反対である単一のタプルエンティティにそれらを組み合わせていますか?

または...文字列を解凍せず、リストのみを解凍しますか?

4

3 に答える 3

3

関数cでは、スプラット (*) のために 1 つの要素のタプルであるため、区切り記号は使用されません。メイン プログラムでは、文字列に分割された文字列に対して join を呼び出しています。次に、そこにある文字と同じ数のセパレーターのインスタンスを取得します(マイナス1)。

于 2013-07-15T20:13:43.777 に答える
2

join は文字列ではなく配列を想定しているため、引数を個別の項目として使用しようとしている場合はc = c.spilt(' ')def wrap.

驚いたことにsep.join(str)、str を文字の配列として扱っているため、文字とスペースの間に余分な -s があります。

于 2013-07-15T20:15:01.737 に答える
1

これ:

>>> wrap(a, sep, str)
testing: a b c d

は次のものとは異なります。

>>> wrap(a, sep, *str)
testing: a- -b- -c- -d

文字列文字のリストです。関数のシグネチャを からdef wrap(a, sep, *c):に変更してdef wrap(a, sep, c):も問題ありません。

于 2013-07-15T20:13:40.357 に答える