面试题总结
1 Python面试题
1.1 简要描述Python中单引号、双引号、三引号的区别
- 通常情况下,单引号和双引号没有区别,都是表示单行字符串。
- 特殊情况下,单引号和双引号可以嵌套使用来避免字符串本身带有双引号和单引号而使用转义字符的情况。
- 三引号分为三单引号和三双引号,三单引号一般用来输入多行文本;三双引号用来写函数或者类的注释文档,可以包含单引号、双引号以及注释。
- 详细解说
1.2 Python中有哪些常用的数据结构
Python中三类主要的容器为序列(str、list、tuple)、映射(dict)和集合(set)。
- 序列中列表是可变的,字符串和元组是不可变的;基于序列的通用操作有索引(indexing)、分片(sliceing)、加(adding)、乘(multiplying)和检查某个元素是否属于序列(in),同时包括一些计算序列长度(len)、最大值(max)和最小值(min)的内置函数。
- 字典也叫散列表,是python唯一内建的映射类型。其中键可以为任何不可变类型(list和set因为可变不能作为键),但是必须唯一。基于映射的通用操作有获取键(keys)、获取值(values)、获取键值对(items)、根据键取值(get)、根据键设定默认值(setdefault)。
- 集合可由序列(或其它可迭代对象)构建,集合主要用于检查成员资格,因此副本通常是忽略的(利用这个特性可以进行序列去重,比如列表去重)。集合本身是可变的,但是其元素必须是不可变的(例如列表和集合不能作为其元素)。基于集合的通用操作有增删改、交集、并集、差集。
- 详细解说
1.3 Python如何在一个函数中设置全局变量
在函数中使用全局变量,需要用关键字global申明,否则会被认为是局部变量;全局变量可以在模块开头用大写的方式进行定义或者将全局变量全部定义在一个单独的模块中(推荐)。
1.4 Python中如何拷贝一个对象(赋值、浅拷贝和深拷贝的区别)
Python中对象赋值、作为参数传递和作为函数返回值传递的都是对象的引用。要拷贝一个对象,可以使用copy模块:
- 浅拷贝:使用copy.copy(object),可以完成对象的浅拷贝,只拷贝父对象,对父对象中的可变元素(例如list、dict等)仍然使用引用,修改拷贝对象中的可变元素,被拷贝对象的可变元素也会被修改,反之亦然。
- 深拷贝:使用copy.deepcoy(object),可以完成对象的深拷贝,递归拷贝父对象及其子对象。获得一个与被拷贝对象完全独立的全新对象。
- 详细解说
1.5 Python中这两个参数是什么意思:*args,**kwargs
- *args表示可变的位置参数(包括0个),定义函数时,表示收集参数(packing),将传入的位置参数收集到以args为标识符的元组中;调用函数时,表示分割参数(unpacking),在传递元组时,让元组的每一个元素对应一个位置参数。
- **kwargs表示可变的关键字参数(包括0个),定义函数时,表示收集参数(packing),将传入的关键字参数收集到以kwargs为标识符的字典中;调用函数时,表示分割参数(unpacking),在传递字典时,让字典的每一个键值对对应一个位置参数。
- 详细解说