关于 Python 的面试题,能力有限,答案不一定正确,错误的地方还请大佬们指出~
语言特性
1. 谈谈 Python 和其他编程语言的区别
答:Python 是一门语法简洁、优美、功能强大、应用领域非常广泛、具有强大完备的第三方库的解释性编程语言。
Python 和 C 语言相比:Python 的第三方库比较齐全并且使用简洁,很少的代码量就能实现一些功能,如果用 C 语言去实现相同的功能就可能比较复杂;但从速度方面来说,Python 的运行速度相较于 C 语言就比较慢了。
2. 简述解释型语言和编译型语言
答:解释型语言是在运行程序的时候进行解释执行,每执行一次,就要解释一次,效率较低;而编译型语言是直接编译成机器可执行的,只需要编译一次,所以效率相对来说较高
3. 说说你知道的 Python 解释器种类以及相关特点?
答:
- CPython 是由 C 语言开发的,使用最广的解释器
- IPython 是基于 CPython 之上的一个交互式解释器,功能更加强大
- PyPy 目标是执行效率,采用 JIT 技术,对 Python 代码进行动态编译,提高执行效率
- JPython 是运行在 Java 上的解释器,可以直接把 Python 代码编译成 Java 字节码来执行
- IronPython 是运行在微软 .NET 平台上的解释器,把 Python 编译成 .NET 字节码
4. 说说你知道的 Python 3 和 2 之间的区别
答:Python 3 和 2 不同之处有很多,这里仅列举几条
print
在 Python 3 中是函数- 像
zip
、map
等这些高阶函数的返回值在 Python 3 是一个生成器,而不再是列表 - 继承:新式类查找变量的搜索方式由深度优先改为广度优先(这条因该归为新式类和旧式类的区别)
- 字符串类型:Python 2 字符串类型默认为 ASCII,Python 3 中默认的字符串类型为 Unicode
- 元类:声明元类的方式不同,Python 2 声明元类
__metaclass__ = MetaClass
,Python 3 为class YourClass(metaclass=MetaClass)
5. 你知道 Python3 和 Python2 中 int 和 long 的区别吗?
答:Python 2 有 int 和 long 类型,int 类型最大值不能超过 sys.maxint
,而且这个最大值是和平台相关的;在数字的末尾附上一个 L 来定义长整型(即 long), long 类型表示的数字范围更大。而在 Python 3 中,只有 int 这一种整数类型,并且在大多数情况下,它和 Python 2 中的长整型类似。
6. xrange
和 range
的区别?
答:xrange
是仅存在于 Python 2中,在 Python 3 中只有 range
。xrange
和range
的用法完全相同,不同点在于xrange
返回的结果值是一个生成器,而不是一个 list
对象。
编码规范
7. 什么是 PEP8?
答:「Python Enhancement Proposal #8」即 Python 8 号增强提案,通常被称为 PEP8,它是针对 Python 代码格式而编订的风格指南。
8. 了解「 Python之禅 」吗?
答:通过 import this
语句可以获取到 Python 之禅的具体内容,它告诉大家如何写出高效整洁的代码。
9. 了解 docstring 吗?
答:docstring 文档字符串是一个重要工具,用于解释文档程序,帮助你的程序文档更加简单易懂。主要是解释代码作用的。
10. 了解类型注解吗?
答:在 PEP 484 引入了类型提示,这让我们可以对 Python 代码进行静态类型检查,在使用 IDE 的时候可以获取到参数的类型,传参的时候更加方便。使用方式如下:
def add(x: int, y: int) -> int:
return x + y
11. 举例你知道的 Python 对象命名规范,例如方法或者类等
答:此处可以参考
12. Python 中的注释有几种?
答:简单来说分为两种,单行注释和多行注释
-
单行注释在改行以 # 开头
-
多行注释可以使用三个单引号或者双引号来包裹要注释的内容
''' 被注释的内容 '''
13. 如何优雅的给一个函数加注释?
答:可以使用 docstring 并配合类型注解
14. 如何给变量加注释?
答:可以通过变量名:类型的方式
a: str = "this is string type"
15. Python 代码缩进中是否支持 Tab 键和空格混用?
答:不允许
16. 是否可以在一句 import 中导入多个库?
答:可以,但不推荐这样使用,因为一次导入多个模块导致代码的可读性不是很好,同时尽量不要使用 from module import *
,这样在调试的时候不方便
17. 在给 Py 文件命名的时候需要注意什么?
答:不要和标准库的一些模块名冲突,如:abc,另外起名要有意义,不建议使用数字开头或中文命名
18. 举例几个规范 Python 代码风格的工具
答:pylint 和 flake8
数据类型
字符串
19. 举例 Python 中的基本数据类型?
20. 如何区别可变数据类型和不可变数据类型?
21. 将 "hello world" 转换为首字母大写的 "Hello World"
22. 如何检测字符串中只含有数字?
23. 将字符串 "ilovechina" 进行反转
24. Python 中的字符串格式化方式,你知道哪些?
25. 有一个字符串开头和末尾都有空格,比如" adabdw ",要求写一个函数把这个字符串的前后空格都去掉
26. 获取字符串 "123456" 最后的两个字符
27. 一个编码为 GBK 的字符串 S,要将其转成 UTF-8 编码的字符串,应如何操作?
28. (1)s = "info : xiaoZhang 33 shandong",用正则切分字符串输出 ['info', 'xiaoZhang', '33', 'shandong']; (2)a = " 你好 中国 ", 去除多余空格只留一个空格。
29. (1)怎样将字符串转换为小写;(2)单引号、双引号、三引号的区别?
列表
30. 已知 AList = [1, 2, 3, 1, 2], 对 AList 列表元素去重,写出具体过程
31. 如何实现 "1, 2, 3" 变成 ["1", "2", "3"]
32. 给定两个 list A 和 B,找出相同元素和不同元素
33. [[1, 2], [3, 4], [5, 6]] 一行代码展开该列表,得出[1, 2, 3, 4, 5, 6]
34. 合并列表 [1, 5, 7, 9] 和 [2, 2, 6, 8]
35. 如何打乱一个列表的元素?
字典
36. 字典操作中 del 的 pop 有什么区别
37. 按照字典内的年龄进行排序
d1 = [
{'name': 'alice', 'age': 38},
{'name': 'bob', 'age': 18},
{'name': 'Car1', 'age': 28}
]
38. 请合并下面两个字典 a = {"A": 1, "B": 2}, b = {"C": 3, "D": 4}
39. 如何使用生成式的方式生成一个字典,写一段功能代码
40. 如何把元组 ('a', 'b') 和元组 (1, 2),变为字典 {'a': 1, 'b': 2}
综合
41. 下列字典对象键类型不正确的是?
A: {1: 0, 2: 0, 3: 0}
B: {'a': 0, 'b': 0, 'c': 0}
C: {(1, 2): 0, (2, 3): 0}
D: {[1, 2]: 0, [2, 3]: 0}
42. 如何将元组 ("A","B") 和元组 (1,2),合并成字典 {"A":1,"B":2}
43. Python 里面如何实现 tuple 和 list 的转换?
44. 我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?
45. 请将 [i for i in range(3)] 改成生成器
46. a="hello"和 b="你好"编码成 bytes 类型
47. 下面的代码输出结果是什么?
a = [1, 2, 3, [4, 5, 6, 7], 8]
a[2] = 2
48. 下面的代码输出结果是什么?
a = (1, 2, 3, [4, 5, 6, 7], 8)
a[3][0] = 2
操作类题目
49. Python 交换两个变量的值
50. 在读文件操作的时候会使用 read、readline 或者 readlines,简述它们各自的作用
51. json 序列化时,可以处理的数据类型有哪些?如何定制支持 datetime 类型?
52 .json 序列化时,默认遇到中文会转换成 unicode,如果想要保留中文怎么办?
53. 有两个磁盘文件 A 和 B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件 C 中。
54. 如果当前的日期为 20190530,要求写一个函数输出 N 天后的日期,(比如 N 为 2,则输出 20190601)。
55. 写一个函数,接收整数参数 n,返回一个函数,函数的功能是把函数的参数和 n 相乘并把结果返回。
56. 下面代码会存在什么问题,如何改进?
def strappend(num):
str = 'first'
for i in range(num):
str += str(i)
return str
57. 一行代码输出 1-100 之间的所有偶数。
58. with 语句的作用,写一段代码?
59. Python 字典和 json 字符串相互转化方法
60. 请写一个 Python 逻辑,计算一个文件中的大写字母数量
61. 请写一段 Python连接 Mongo 数据库,然后的查询代码。
62. 说一说 Redis 的基本类型。
63. 请写一段 Python连接 Redis 数据库的代码。
64. 请写一段 Python 连接 MySQL 数据库的代码。
65. 了解 Redis 的事务么?
66. 了解数据库的三范式么?
67. 了解分布式锁么?
68. 用 Python 实现一个 Redis 的分布式锁的功能。
69. 写一段 Python 使用 Mongo 数据库创建索引的代码。
高级特性
70. 函数装饰器有什么作用?请列举说明?
71. Python 垃圾回收机制?
72. 魔法函数 __call__
怎么使用?
73. 如何判断一个对象是函数还是方法?
74. @classmethod 和@staticmethod 用法和区别
75. Python 中的接口如何实现?
76. Python 中的反射了解么?
77. metaclass 作用?以及应用场景?
78. hasattr() getattr() setattr()的用法
79. 请列举你知道的 Python 的魔法方法及用途。
80. 如何知道一个 Python 对象的类型?
81. Python 的传参是传值还是传址?
82. Python 中的元类(metaclass)使用举例
83. 简述 any()和 all()方法
84. filter 方法求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
85. 什么是猴子补丁?
86. 在 Python 中是如何管理内存的?
87. 当退出 Python 时是否释放所有内存分配?
正则表达式
88. (1)使用正则表达式匹配出<html><h1>www.baidu.com</html>
中的地址(2)a="张明
98 分",用 re.sub,将 98 替换为 100
89. 正则表达式匹配中(.)和(.?)匹配区别?
90. 写一段匹配邮箱的正则表达式
其他内容
91. 解释一下 Python 中 pass 语句的作用?
92. 简述你对 input()函数的理解
93. Python 中的 is 和==
94. Python 中的作用域
95. 三元运算写法和应用场景?
96. 了解 enumerate 么?
97. 列举 5 个 Python 中的标准模块
98. 如何在函数中设置一个全局变量
99. pathlib 的用法举例
100. Python 中的异常处理,写一个简单的应用场景
101. Python 中递归的最大次数,那如何突破呢?
102. 什么是面向对象的 mro
103. isinstance 作用以及应用场景?
104. 什么是断言?应用场景?
105. lambda 表达式格式以及应用场景?
106. 新式类和旧式类的区别
107. dir()是干什么用的?
108. 一个包里有三个模块,demo1.py, demo2.py, demo3.py,但使用
from tools import *
导入模块时,如何保证只有 demo1、demo3 被导入了。
109. 列举 5 个 Python 中的异常类型以及其含义
110. copy 和 deepcopy 的区别是什么?
111. 代码中经常遇到的*args
, **kwargs
含义及用法。
112. Python 中会有函数或成员变量包含单下划线前缀和结尾,和双下划线前缀结尾,区别是什么?
113. w、a+、wb 文件写入模式的区别
114. 举例 sort 和 sorted 的区别
115. 什么是负索引?
116. pprint 模块是干什么的?
117. 解释一下 Python 中的赋值运算符
118. 解释一下 Python 中的逻辑运算符
119. 讲讲 Python 中的位运算符
120. 在 Python 中如何使用多进制数字?
121. 怎样声明多个变量并赋值?
算法和数据结构
122. 已知:
AList = [1, 2, 3]
BSet = {1, 2, 3}
(1)从 AList 和 BSet 中查找 4,最坏时间复杂度哪个大?
(2)从 AList 和 BSet 中插入 4,最坏时间复杂度哪个大?