1. python是静态还是动态类型?是强类型还是弱类型?
1.动态强类型语言(不少人误认为是弱类型);
2.动态还是静态指的是编译期还是运行期确定类型;
3.强类型指的是不会发生隐式类型转换;
2. python作为后端语言的优缺点,如为啥要用python?
1.胶水语言,轮子多,应用广泛;
2.语言灵活,生产力高;
3.性能问题,代码维护问题,python 2/3 兼容问题;
3. 什么是鸭子类型?
当看到一只鸟走起来像鸭子,游泳起来像鸭子,叫起来像鸭子,那么这只鸟就可以被称为鸭子;
1. 关注点在对象的行为,而不是类型(duck typing);
2. 比如 file, stringIO, socket 对象都支持readl/write方法(file like object);
3. 再比如定义了 __Iter__ 魔法方法的对象可以用for 迭代;
注:鸭子类型更关注接口而非类型;
4. 什么是monkey patch?哪些地方用到了?自己如何实现?
1. 所谓的monkey patch就是运行时替换;
2. 比如gevent库需要修改内置的socket;
3. from gevent import monkey; monkey.patch_socket() ;
5. 什么是自省?(Introspection)
1. 运行时判断一个对象的类型的能力;
2. python一切皆对象,用type, id, isinstance 获取获取对象类型信息;
3. Inspect模块提供了更多获取对象信息的函数;
6. 什么是列表和字典推导?
1. 比如 [i for i in range(10) if i % 2 == 0] ;
2. 一种快速生成dict/list/set 的方式,用来代替 map/filter等;
3. (i for i in range(10) if i % 2 == 0)返回生成器;
demo:
image.png
image.png
7.知道python之禅吗?
1. Tim Peters 编写的关于python编程的准则;
2. import this
3. 编程拿不准的时候可以参考;
8. python 2/3 的差异有哪些?
使用pyenv 安装多版本python
image.png
python3的改进
1. print成为函数
2. 编码问题,python3不再有Unicode对象,默认str 就是unicode
3. 除去变化。 python3除号返回浮点数;
4. 类型注解(type hint) 帮助IDE实现类型检查;
5. 优化的super()方便直接调用父类函数;
6.高级解包操作;a, b, *rest = range(10);
7. Keyword only arguments, 限定关键字参数;
8. Chained exceptions, python3 重新抛出异常不会丢失栈信息;
9. 一切返回迭代器, range, zip ,map , dict.values, etc , are all iterators;
10. 生成的pyc文件统一放到了__pycache__;
11. 一些内置库的修改,urllib, selector等;
12. 性能优化等等;
image.png
image.png
image.png
image.png
python3新增
1. yield from 链接子生成器;
2. asyncio内置库, async/await 原生协程支持异步编程;
3. 新的内置库, enum, mock ,asyncio, ipaddress, councurrent.futures 等;
9. 熟悉一些兼容python 2/3的工具
1. six模块;
2. 2to3 等工具转换代码;
3. __futrue__;
10. 一下python代码分别输出什么?
- 可变类型作为参数
def flist(l):
l.append(0)
print(id(l))
print(l)
ll = []
print(id(ll))
flist(ll)
flist(ll)
# 输出结果:
1666522285320
1666522285320
[0]
1666522285320
[0, 0]
- 不可变类型作为参数
def fstr(s):
s += 'a'
print(id(s))
print(s)
ss = 'hehe'
print(id(ss))
fstr(ss)
fstr(ss)
# 输出结果:
1452230375160
1452230377064
hehea
1452230377064
hehea
[1, 2, 3]