易錯題

def num():
    return [lambda x:i*x for i in range(4)]
i = 5
print([m(2) for m in num()])

 

3.1 下面代碼的輸出結果將是什麼?(2018-3-30-lxy)
1. list = ['a', 'b', 'c', 'd', 'e']
2. print list[10:]
下面的代碼將輸出[],不會產生IndexError錯誤。就像所指望的那樣,嘗試用超出成員的個數的index
來獲取某個列表的成員。
例如,嘗試獲取 list[10]和以後的成員,會致使 IndexError。
然而,嘗試獲取列表的切片,開始的 index 超過了成員個數不會產生 IndexError,而是僅僅返回一
個空列表。這成爲特別讓人噁心的疑難雜症,由於運行的時候沒有錯誤產生,致使 bug 很難被追蹤到。
 
3.7 下面這段代碼的輸出結果是什麼?請解釋?(2018-4-16-lxy)
def extendlist(val, list=[]):
    list.append(val)
    return list

list1 = extendlist(10)
list2 = extendlist(123, [])
list3 = extendlist('a')

print("list1 = %s" %list1)
print("list2 = %s" %list2)
print("list3 = %s" %list3)
輸出結果:
list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']
新的默認列表只在函數被定義的那一刻建立一次。當 extendList 被沒有指定特定參數 list 調用時,這組 list 的值
隨後將被使用。這是由於帶有默認參數的表達式在函數被定義的時候被計算,不是在調用的時候被計算。
 
下列代碼的輸出結果是?
 
def num():
    return [lambda x:i*x for i in range(4)]
i = 5
print([m(2) for m in num()])

 輸出app

[6,6,6,6]
相關文章
相關標籤/搜索