2012-02-12 220 views
4

倒數第二行在這裏做什麼?它似乎沒有分配變量,打印或任何東西,但我試過以各種方式打破代碼,並且doublelist(somelist)似乎是必要的,但我不知道爲什麼。python中的def行有什麼作用

def doubleList(list): 
    i=0 
    while i<len(list): 
     list[i]=list[i]*2 
     i=i+1 

someList=[34,72,96] 
doubleList(someList) 
print someList 
+0

它修改列表,每一個項目改變它的兩倍。有什麼令人驚訝的呢? – 2012-02-12 20:04:37

+0

它調用該函數'def doubleList(list)',它修改'someList'。我建議閱讀Python教程:http://docs.python.org/tutorial/controlflow.html#defining-functions – birryree 2012-02-12 20:04:55

+3

'doubleList'修改傳入它的列表。使用可怕的風格。 – geoffspear 2012-02-12 20:05:21

回答

4

函數調用可以修改傳遞給它們的可變參數。名爲「list」的(名字不清的)列表具有(使用非慣用式)其元素的每個乘以2,就地。例如:

>>> def inplace(seq): 
...  seq[0] = 5 
... 
>>> a = [1,2,3] 
>>> print a 
[1, 2, 3] 
>>> inplace(a) 
>>> a 
[5, 2, 3] 
3

聲明

def doublieList(list): 

及以下縮進的行只需要創建一個功能

下一個到最後一個行導致該功能對someList

1

由於@DSM已經回答了這個問題,我給你提供這個功能的更Python版本:

def doubleList(something_other_than_list): 
     for i in range(len(something_other_than_list)): something_other_than_list[i] *= 2 
+2

'def doubleList(seq):seq [:] = [x * 2 for x in seq]'更加pythonic? – DSM 2012-02-12 20:30:38

+0

呵呵是的。是的,它會的。 – 2012-02-12 20:38:25

+0

最好選擇一個有意義的名稱def doubleList(listOfNumbers):listOfNumbers [:] = [x * 2 for x in listOfNumbers]'名字來自問題域,其中單詞'list'被理解爲一個序列。 – 2012-02-12 22:47:58

相關問題