【python面试指北】1.语言基础

2019-11-10  本文已影响0人  知鱼君

1. python是动态强类型的语言。

动态还是静态指的是编译器还是运行期确定类型

强类型指的是不会发生隐式类型转换。比如js能够执行1+"1",但是python不行,所以python是弱类型的语言。

2. 鸭子类型

当一只鸟走起来像鸭子、游泳起来像鸭子、叫气力啊也像鸭子,那么这只鸟就可以被称为鸭子。

鸭子类型关注的是对象的行为,而不是类型。比如file,StringIO,socket对象都支持read/write方法,再比如定义了iter魔术方法的对象可以用for迭代。

3. monkey patch

所谓的monkey patch就是运行时替换。

4. 自省

运行时判断一个对象类型的能力。

python一切皆对象,用type, id, isinstance获取对象类型信息。

5. 列表和字典推导

如 [i for i in range(10) if i % 2 == 0],如果[]改为(),则为生成器

6. python2和python3

7. python如何传递参数

python既不是值传递也不是引用传递,唯一支持的参数传递是共享传参。

call by object(call by object reference or call by sharing)

call by sharing(共享传参),函数形参获得实参中各个引用的副本。

变量一切都是对象。list是可变对象,string是不可变对象

总结一下:根据对象的引用来传递,根据对象是可变对象还是不可变对象,得到两种不同的结果。如果是可变对象,则直接修改。如果是不可变对象,则生产新对象,让形参指向新对象

8. python可变/不可变对象

不可变对象: bool/int/float/tuple/str/frozenset
可变对象:list/set/dict

练习题:

# 1
def clear_list(l)
    l = []
ll = [1,2,3]
clear_list(ll)
print(lll)

# 2
def fl(l=[1]):
    l.append(1)
    print(l)
fl()
fl()
# 记住:默认参数只计算一次

**9. *args, kwargs

用来处理可变参数,args被打包成tuple,kwargs被打包成dict

传递方式有两种

# 第一种
foo(1,2,3)
foo(a=1,b=2)
# 第二种
foo(*[1,2,3])
foo(**dict(a=1,b=2)})

10. python异常机制

BaseException
下面有SystemExit/KeyboardInterrupt/GeneratorExit/Exception(其他异常都属于它)

try:
     # func   # 可能会抛出异常的代码
except (Exception1, Exception2) as e:  # 可以捕获多个异常并处理
    # 异常处理的代码
else:
    # pass  # 异常没有发生的时候代码逻辑
finally:
    pass     # 无论异常有没有发生都会执行的代码,一般处理资源的关闭和释放

11. 自定义异常

继承Exception实现自定义异常,给异常加上一些附加信息

不用baseException是因为这样的话ctrl+c的keybord异常就用不了了

12. python性能分析与优化,GIL

GIL的影响

限制了程序的多核执行

对IO密集程序影响不大

如何规避GIL的影响

区分CPI和IO密集程序

13. 服务端性能优化措施

web应用一般语言不会成为瓶颈

14. python生成器与协程

Generator

协程不懂

15. python3原生协程

async/await支持原生协程

16. python单元测试

三无代码不可取(无稳定、无注释、无单测)

单元测试相关的库

17. python深拷贝与浅拷贝

上一篇 下一篇

猜你喜欢

热点阅读