我完全理解这个表达式的右侧在做什么。但它又变成了什么?换句话说,左边在做什么?
[records, remainder] = ''.join([remainder, tmp]).rsplit(NEWLINE,1)
我不熟悉那种语法。
remainder
在此行上方定义为空字符串:
remainder = ''
但未records
在函数的任何地方定义。
从上下文来看,它应该是积累流媒体内容,但我不明白如何。
我完全理解这个表达式的右侧在做什么。但它又变成了什么?换句话说,左边在做什么?
[records, remainder] = ''.join([remainder, tmp]).rsplit(NEWLINE,1)
我不熟悉那种语法。
remainder
在此行上方定义为空字符串:
remainder = ''
但未records
在函数的任何地方定义。
从上下文来看,它应该是积累流媒体内容,但我不明白如何。
records
正在获取 的rsplit
返回值的第一个元素。remainder
正在服用第二个。
% 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]
,但它们是风格的。
它首先将的内容remainder
与tmp
使用空字符串作为连接符的内容连接起来。
''.join([...])
然后它从右边拆分NEWLINE
这个连接,使用as splitter 并且只进行一次拆分,也就是说,它返回两个值,一个从开始到第一次出现,NEWLINE
另一个从那里到结束。
.rsplit(NEWLINE, 1)
最后,它使用tuple unpacking分配第一个值records
和第二个值。remainder
a, b = (c, d)
不确定流媒体内容,但自己尝试一下很容易:
>>> a = 'abc'
>>> b = '\ndef\nghi'
>>> c = (a + b).rsplit('\n', 1)
#['abc\ndef', 'ghi']
然后它使用解包来分配两个变量(应该写成):
fst, snd = c
([]
's 是多余的)