2012-05-01 80 views
3

我正在读一本书阅读,它涵盖了下面的这个例子。Python字符串.format(*变量)

somelist = list(SPAM) 
parts = somelist[0], somelist[-1], somelist[1:3] 
'first={0}, last={1}, middle={2}'.format(*parts) 

一切似乎从明星除了明确在最后一行的末尾被使用。这本书没有解释这种用法,我讨厌在没有完全理解的情况下取得进展。

非常感谢您的帮助。

回答

4

这是参数拆包(有点)操作符。

args = [1, 2, 3] 
fun(*args) 

相同

fun(1, 2, 3) 

(对于某些可调用fun)。

还有的还出演函数定义的,这意味着“所有其它位置参数”:

def fun(a, b, *args): 
    print('a =', a) 
    print('b =', b) 
    print('args =', args) 

fun(1, 2, 3, 4) # a = 1, b = 2, args = [3, 4] 
8

*操作,通常被称为星或图示操作,解压可迭代到函数的参数,所以在这种情况下,它等同于:

'first={0}, last={1}, middle={2}'.format(parts[0], parts[1], parts[2]) 

The python docs有更多的信息。

+0

将元组更改为集合,因为它适用于任何迭代。希望你不介意:) –

+0

@NiklasB。这是真的,我正在考虑这个案例,但事实上,通常你可以使用任何迭代器。实际上,我会将collection更改为iterable,因为它们不是完全相同的东西 - 例如,您也可以使用生成器。 –

+0

当然,我认为集合和迭代是一样的,但是这样做更有意义。 –

0

*在函数内部中使用时是指该variable以下的*是一个可迭代,并且该函数内部中提取。 这里'first={0}, last={1}, middle={2}'.format(*parts)实际上代表了这一点:

'first={0}, last={1}, middle={2}'.format(parts[0],parts[1],parts[2]) 

例如:

>>> a=[1,2,3,4,5] 
>>> print(*a) 
1 2 3 4 5