python面试题

python语言特性

python是静态还是动态类型?是强类型还是弱类型?

  • 动态强类型语言
  • 动态还是静态指的是编译期还是运行期确定类型
  • 强类型指的是不会发生隐式类型转换

python作为后端语言优缺点

为什么要用python

  • 胶水语言,轮子多,应用广泛
  • 语言灵活,生产力高
  • 性能问题、代码维护问题、python2/3兼容问题

什么是鸭子类型

  • 关注点在对象行为,而不是类型
  • 比如file, StringIO,socket对象都支持read/write方法(file like object)
  • 再比如定义了iter魔术方法的对象可以用for迭代

鸭子类型更关注接口而非类型

什么是monkey patch

什么是monkey patch? 那些地方用到了?自己如何实现?

  • 所谓的monkey patch就是运行时替换
  • 比如gevent库需要修改内置的socket
  • from gevent import monkey; monkey.patch_socket()

什么是自省?

introspection

  • 运行时判断一个对象的类型的能力
  • python 一切皆对象,用type, id, isinstance获取对象类型信息
  • inspect模块提供了更多获取对象信息的函数

什么时列表和字典推导

  • 比如返回列表
[i for i in range(10) if i % 2 == 0]
  • 一种快速生成list/dict/set的方式。用来替代map/filter等

  • 返回生成器

(i for i in range(10) if i % 2 == 0)

python之禅

  • Tim Peters 编写的关于python编程准则
  • import this看到
  • 编程拿不准的时候可以参考

python2/3差异常考题

python改进

  • print成为函数
  • 编码问题。python3不再有Unicode对象,默认str就是unicode
  • 除法变化。python3除号返回浮点数

python3改进

  • 类型注解(type hint)。帮助IDE实现类型检查
  • 优化的super()方便直接调用父类函数
  • 高级解包操作。a,b,*rest = range(10)

python3改进

  • 限定关键词参数
def add(a,b, *, c):
  return a+b+c
add(1,2, c=3)# c=3必须这么写
  • python3重新抛出异常不会丢失栈信息
    raise from OSError
  • 一切返回迭代器 range,zip,map,dict,values,etc都是迭代器(节省内存)

python3新增

  • yield from 链接子生成器
  • asyncio内置库, async/await原生协程支持异步编程
  • 新的内置库enum, mock, asyncio, ipaddress, concurrent.futures等
  • 生成的pyc文件统一放到pycache
  • 一些内置库的修改, urllib,selector等
  • 性能优化

兼容python2/3工具

  • six模块
  • 2to3等工具转换代码
  • future
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Static 修饰变量时,会将变量内容存放在静态区,定义时会去静态去查找,如果该变量不存在,则创建一个该变量,如果...
    兔迪哥阅读 519评论 0 0
  • 今日一天混乱无比,思路虽然免强屡清了,但与各位沟通了,显然各方意见都不太支持,这我很苦恼。按这个思路去执行的话,第...
    王翼wy阅读 64评论 0 0
  • 《毕业季》七月,是忙碌的季节,是收获的季节,也是忙碌的季节。到处都是幼儿园、小学、中学、大学的学子们的毕业典礼。顿...
    cb9fa4682249阅读 178评论 0 1