目录
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.