目錄
1.列表和元組的內部實現
答:它和list相似,本質也是一個array,但是空間大小固定,不同於一般array,python的tuple做了許多優化,來提高在程序中的效率。如,當tuple的大小不超過20時,python就會把它緩存在內部的一個free list中,這樣,如果你以後需要去創建現樣的tuple,python就可以直接從緩存中載入,提高程序運行效率。
2.爲什麼在舊哈希表中,元素會越來越稀疏。
答:在例子中對比,可以看到新哈希表中的空間利用率,相比於舊哈希有大的提升。
3.有關異常的困擾
e = 1
try:
1 / 0
except ZeroDivisionError as e:
try:
pass
finally:
del e
e開始指向整數1,但是except block結束時被刪除(dele),所以會的“NameErroe”,所以在寫代碼時,一定要保證except中異常賦予的變量,在之後有語句中不再被用到。
4.關於多態和全局變量的修改
(1)python自己判斷的多態和子類繼承的多態Polymorphism是否相同
答:多態是指多種不同的形態,因此,判斷類型是多態還是子類繼承的多態,在本質上是一樣的,只不過可以把它們理解爲兩tkhi同的表現形式。
(2)函數內部不能直接用+=修改全局變量,但對於list全局變量,卻可以使用append、extend之類修改?
答:全局變量指向對象不可變是,比如整型、字符串,如果嘗試在函數內部改變它的值,卻不加關鍵字global,就會拋出異常。
x = 1
def func():
x += 1
func()
x
## 輸出
UnboundLocalError: local variable 'x' referenced before assignment
這是因爲程序默認函數內部的x是局部變量,而你沒有爲其賦值就直接引用,顯然不可行,不過,如果全局變量指向的對象是可變的,比如列表、字典等,就可以在函數內部修改。
x = 1
def func():
x += 1
func()
x
## 輸出
UnboundLocalError: local variable 'x' referenced before assignment
注意的是,x.append(2),並沒有改變變量x,x依然指向原來的列表。這句的意思是,訪問x指向的列表,並在這個列表的末尾加2.