歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> 廖雪峰python教程的第一個疑問,廖雪峰python教程

廖雪峰python教程的第一個疑問,廖雪峰python教程

日期:2017/3/3 18:05:56   编辑:學習Linux

廖雪峰python教程的第一個疑問,廖雪峰python教程

廖雪峰python教程的第一個疑問,廖雪峰python教程


函數的參數一節中提到:

  def add_end(L = []);

    L.append('END')

    return L

正常調用add_end時(也就是有參數傳入時):

  

    >>> add_end([1, 2, 3])
    [1, 2, 3, 'END']
    >>> add_end(['x', 'y', 'z'])
    ['x', 'y', 'z', 'END']

當使用默認參數時:
>>> add_end()
['END']

>>> add_end()
['END', 'END']
>>> add_end()
['END', 'END', 'END']

廖雪峰解釋如下:

  Python函數在定義的時候,默認參數L的值就被計算出來了,即[],因為默認參數L也是一個變量,它指向對象[],每次調用該函數,如果改變了L的內容,則下次調用時,默認參數的內容就變了,不再是函數定義時的[]了。

我的理解如下:

  第一行,傳入參數[1,2,3],接下來的代碼都是針對[1,2,3] 的,跟L = [] 沒有關系,第三行和第一行一樣,這兩次都沒涉及到L = [] ,所以L的值不變。第二行沒有傳入參數,所以接下來的代碼是針對L了,由[]變成了['END'],第四行還是針對L,但L的值已經變成了['END'],又運行一次,所以就變成了['END','END'] 。

改進的方式如下:

def add_end(L=None):
    if L is None:
        L = []
    L.append('END')
    return L

>>> add_end()
['END']
>>> add_end()
['END']

但是我對if L is None : L = [] 這一句還不理解,希望後續能明白吧。
 
 

http://xxxxxx/Linuxjc/1175089.html TechArticle

Copyright © Linux教程網 All Rights Reserved