2012-05-01 122 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