4

の戻り値を適切な数の変数に割り当て/解凍できる理由に戸惑いsplit()ますが、フォーマットディレクティブを使用した印刷文字列での使用には同じことが失敗します。

例:与えられた:

In [202]: s
Out[202]: 'here are 4 values'

In [203]: s.split()
Out[203]: ['here', 'are', '4', 'values']

これは期待どおりに機能します。

In [204]: a, b, c, d = s.split()

In [205]: print '%s %s %s %s' % (a, b, c, d)
here are 4 values

しかし、これは失敗します..

 In [206]: print '%s %s %s %s' % (s.split())

理由がわかりませんか?の戻り値をsplit()解凍して、フォーマット文字列の予想される引数に分散させるべきではありませんか?

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
C:\bla\Desktop\<ipython-input-206-600f130ff0b2> in <module>()
----> 1 print '%s %s %s %s' % (s.split())

TypeError: not enough arguments for format string

「十分な引数に注意してください」..リストには適切な数の項目があります。この場合、何らかの理由でリストは解凍されませんが、変数への割り当ては解凍されますか?

私はこの質問に答えようとして 、Pythonで列のエントリを上下に並べてこれに遭遇しました

4

4 に答える 4

4

根本的な問題は、%フォーマットとアンパックがまったく関係がないことです。% では、値がタプルにある必要があります。他の種類のシーケンスは機能しません。(ただし、単一の非タプル値を受け入れます。)

これは、それが望ましいかどうかにかかわらず、すべてのタプルが値のタプルとして解釈されるという不幸な結果をもたらします。したがって、タプルを値として扱うには、それを別のタプルで囲む必要があります。

>>> '%s' % ('a', 'b')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
>>> '%s' % (('a', 'b'),)
"('a', 'b')"

とにかく使用するformatことが望ましいです。

于 2012-05-01T07:48:25.423 に答える
4

s.split()そのようにタプルに変換する必要があります

>>> s = 'here are 4 values'
>>> '%s %s %s %s' % tuple(s.split())
'here are 4 values'

フォーマットするか、.format()代わりに使用して、引数をアンパックします。

'{0} {1} {2} {3}'.format(*s.split())
于 2012-05-01T07:41:56.273 に答える
3

問題は、 % が引数のアンパックを許可していないことだと思います。動作する方法は次のとおりです。

>>> s = 'Here are some values'
>>> '{} {} {} {}'.format(*s.split())
'Here are some values'

@senderle は、この構文は python 2.7 以降でのみ機能することを指摘しました。以前のバージョンで機能するコードは次のとおりです。

>>> s = 'Here are some values'
>>> '{0} {1} {2} {3}'.format(*s.split())
'Here are some values'
于 2012-05-01T07:48:39.647 に答える
1
>>> s = 'here are 4 values'
>>> print '%s %s %s %s' % tuple(s.split())
here are 4 values
>>> print '%s' % s.split()
['here', 'are', '4', 'values']

Python はリストを文字列に変換しようとしているため、必要なパラメーターは 1 つだけです

于 2012-05-01T07:45:23.843 に答える