2

この表現の右側が何をしているのかを完全に理解しています。しかし、それは何に戻っているのでしょうか?言い換えれば、左側は何をしているのですか?

[records, remainder] = ''.join([remainder, tmp]).rsplit(NEWLINE,1)

私はその構文に精通していません。

remainderこの行の上に空の文字列として定義されています。

remainder = ''

ただしrecords、関数のどこにも定義されていません。

文脈からすると、ストリーミングコンテンツを蓄積しているはずですが、その方法がわかりません。

4

3 に答える 3

3

recordsrsplitは、の戻り値の最初の要素を取ります。remainder2番目を取っています。

% python
Python 2.7 (r27:82500, Sep 16 2010, 18:02:00) 
[GCC 4.5.1 20100907 (Red Hat 4.5.1-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> foo = [3, 9]
>>> [records, remainder] = foo
>>> records
3
>>> remainder
9
>>> foo = [3, 9, 10]
>>> [records, remainder] = foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack

実際には角かっこは必要ありませんが、[records, remainder]文体です。

于 2013-01-15T18:28:55.767 に答える
1

最初に、のコンテンツをジョイナーとして空の文字列を使用するコンテンツと結合します。remaindertmp

''.join([...])

次に、スプ​​リッターとして使用し、1つの分割のみを実行して、この結合を右から分割します。つまり、最初から最初の出現までと、そこから最後までNEWLINEの2つの値を返します。NEWLINE

.rsplit(NEWLINE, 1)

最後に、最初の値をタプルアンパックの使用に割り当て、records2番目の値を使用します。remainder

a, b = (c, d)
于 2013-01-15T18:35:26.383 に答える
0

コンテンツのストリーミングについてはよくわかりませんが、これを自分で試すのは簡単です。

>>> a = 'abc'
>>> b = '\ndef\nghi'
>>> c = (a + b).rsplit('\n', 1)
#['abc\ndef', 'ghi']

次に、解凍​​を使用して2つの変数(次のように記述する必要があります)を割り当てます。

fst, snd = c

[]'は不要です)

于 2013-01-15T18:31:01.173 に答える