解释不熟悉的python语法 - 返回列表

时间:2013-01-15 18:24:50

标签: python

我完全理解这个表达的右边是做什么的。 但它又回归了什么?换句话说,左边做了什么?

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

我不熟悉那种语法。

remainder在此行上方定义为空字符串:

remainder = ''

records未在函数中的任何位置定义。

从上下文来看,它应该是在积累流内容,但我不了解如何。

3 个答案:

答案 0 :(得分:3)

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]周围的方括号,但它们是风格的。

答案 1 :(得分:1)

首先remainder tmp的内容,其中''.join([...]) 的内容使用空字符串作为连接符。

NEWLINE

然后从右边开始joins这个连接,使用NEWLINE作为拆分器,只进行一次拆分,也就是说,它返回两个值,一个从{{1开始到第一次出现从另一端到另一端。

.rsplit(NEWLINE, 1)

最后,它使用splits将第一个值分配给records,将第二个值分配给remainder

a, b = (c, d)

答案 2 :(得分:0)

不确定流内容,但很容易为自己尝试:

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

然后它使用解包来分配两个变量(应该写成):

fst, snd = c

[]是多余的)