180道Python面试题,答案持续更新

这里有2019年最新的180道面试题!帮助你一举通过面试!面试题转自CSDN,答案会持续更新

1.列出 5 个常用 Python 标准库?

os, math, random, time, pymysql,re

2.Python 内建数据类型有哪些?

数字,字符串,列表,元组,字典,集合,Bytes,布尔等

3.简述 with 方法打开处理文件帮我我们做了什么?


file = open('a.txt','w')
try:
    file.write('test')
except:
    pass
finally:
    file.close()
# with方法相当于以上代码finally中的file.close()操作

4.列出 Python 中可变数据类型和不可变数据类型,为什么?

不可变数据类型:数字、字符串、元组,变量不允许修改,值改变后,id也会变;
可变数据类型:集合、列表、字典,值改变后,id不会变

5.Python 获取当前日期?

import time
now = time.strftime("%Y-%m-%d %H:%M:%S %A")
print(now)

6.统计字符串每个单词出现的次数

import string
str_input = "Hello world, hello python"
str_test = str_input.lower()
intab = string.punctuation
outtab = " "*32
trantab = str.maketrans(intab,outtab)
str_test.translate(trantab)
li_test = str_test.split(" ")
rst = {}
for item in li_test:
    if item in rst.keys():
        rst[item] = rst[item] + 1
    else:
        rst[item] = 1
print(rst)

返回

{'hello': 2, 'world,': 1, 'python': 1}

7.用 python 删除文件和用 linux 命令删除文件方法

import os
# python删除文件
os.remove(path)
# python删除目录
os.removedirs(path)

linux删除文件

rm [选项] 文件

选项说明:
-f    -force      忽略不存在的文件,强制删除,无任何提示
-i    --interactive    进行交互式地删除
-r | -R  --recursive     递归式地删除列出的目录下的所有目录和文件
-v      --verbose    详细显示进行的步骤

8.写一段自定义异常代码

class ShortInputException(Exception):
    '''自定义异常类'''
    def __init__(self, length, atleast):
        self.length = length
        self.atleast = atleast

try:
    s = input('please input:')
    if len(s) < 3:
        raise ShortInputException(len(s), 3)
except ShortInputException as e:
    print('输入长度是%s,长度至少是%s' %(e.length, e.atleast))
else:
    print('nothing...')

如果输入字符长度小于3,那么将会抛出 ShortInputException 异常:

please input:qw
输入长度是2,长度至少是3 

9.举例说明异常模块中 try except else finally 的相关意义

try:
    ------code-----
except Exception as e: # 抛出异常之后将会执行
    print(e)
else:  # 没有异常将会执行
    print('no Exception')
finally:  # 有没有异常都会执行
    print('execute is finish')

10.遇到 bug 如何处理

查看报错行和错误类型,debug找出问题所在进行处理。
常见错误类型有以下几种:
1. TypeError: cannot concatenate 'str' and 'int' objects  
    不能连接str和int对象
2. IndexError: list index out of range
    索引错误:列表索引超出范围
3. IndentationError: expected an indented block
    缩进错误:预期一个缩进快(意思需要一个缩进块)
4. IndentationError: unexpected indent
    缩进错误:意外缩进(这里不应缩进)
5. TypeError: 'tuple' object does not support item assignment
    类型错误:元组对象不支持元素值重新分配,也就是不能尝试去修改元组中的任一个元素的值
6. SyntaxError: invalid syntax
    语法错误 非法的语法
7. AttributeError: 'tuple' object has no attribute 'remove'
    attribute 属性 object对象
8. KeyError: 'XXX'
    key键错误,没有指定的键值'XXX'

语言特性

1.谈谈 Python 和其他语言的区别

Python是一门语法简洁优美,功能强大无比,应用领域非常广泛,具有强大完备的第三方库的一门弱类型的可移植,可扩展,可嵌入的解释型编程语言。

Python和Java相比:
Python比Java要简单,Python是函数为一等公民的语言,而Java是类为一等公民的语言。Python是弱类型语言,而Java是强类型语言。

Python和C相比
对于使用:
Python的类库齐全并且使用简洁,很少代码实现的功能用C可能要很复杂。
对于速度:
Python的运行速度相较于C,绝对是很慢了。Python和CPython解释器都是C语言编写的。

2.简述解释型和编译型编程语言

解释型:就是边解释边执行
编译性:编译后再执行

3.Python 的解释器种类以及相关特点?

CPython:c语言开发的使用最广的解释器,在命令行下运行python就是启动CPython解释器
IPython:基于cpython之上的一个交互式计时器 交互方式增强 功能和cpython一样
PyPy:目标是执行效率 采用JIT技术 对python代码进行动态编译,提高执行效率
JPython:运行在Java上的解释器 直接把python代码编译成Java字节码执行
IronPython:运行在微软 .NET 平台上的解释器,把python编译成. NET 的字节码

4.说说你知道的Python3 和 Python2 之间的区别?

1.print函数:(Python3中print为一个函数,必须用括号括起来;Python2中print为class)
2.通过input()解析用户的输入:(Python3中input得到的为str;Python2的input的到的为int型,Python2的raw_input得到的为str类型)
3.整数:Python3中/表示真除,%表示取余,//结果取整;Python2中带上小数点/表示真除,%表示取余,//结果取整
4.xrange模块改为range
5.比较操作符区别:Python2中任意两个对象都可以比较,Python3中只有同一数据类型的对象可以比较
6.编码:Python2中使用 ASCII 码作为默认编码方式,Python3默认使用utf-8编码

5.Python3 和 Python2 中 int 和 long 区别?

python2中有long类型
python3中没有long类型,只有int类型

6.xrange 和 range 的区别?

1.range返回的是一个list对象,而xrange返回的是一个生成器对象(xrange object)。
2.xrange则不会直接生成一个list,而是每次调用返回其中的一个值,内存空间使用极少,因而性能非常好。

编码规范

7.什么是 PEP8?

《Python Enhancement Proposal #8》(8 号 Python 增强提案)又叫 PEP8,他针对的 Python 代码格式而编订的风格指南。
1.缩进。4个空格的缩进(编辑器都可以完成此功能),不使用Tab,更不能混合使用Tab和空格。
2.每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。
3.类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。
4.模块导入的顺序:按标准、三方和自己编写顺序依次导入,之间空一行。
5.不要在一句import中写多个库,比如import os, sys不推荐
6.避免不必要的空格
7.注释必须要有
8.函数命名要遵循规范
9.尽可能使用‘is’‘is not’取代‘==’,比如if x is not None 要优于if x。
10.使用基于类的异常,每个模块或包都有自己的异常类,此异常类继承自Exception。
11.异常中try的代码尽可能少。

8.了解 Python 之禅么?

Python社区的理念都包含在Tim Peters撰写的“Python之禅”中。要获悉这些有关编写优秀Python代码的指导原则,只需在解释器中执行命令import this。
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

9.了解 docstring 么?

Docstring是一种文档字符串,用于解释构造的作用。我们在函数、类或方法中将它放在首位来描述其作用。我们用三个单引号或双引号来声明docstring。
要想获取一个函数的docstring,我们使用它的__doc__属性.

10.了解类型注解么?

# python3.5后增加了参数注解
def add(x:int, y:int) -> int:
    return x + y
# 用 : 类型 的形式指定函数的参数类型,用 -> 类型 的形式指定函数的返回值类型。

# python3.6后增加了类型注解
a: int = 123
b: str = 'hello'

# 更进一步,如果你需要指明一个全部由整数组成的列表:
from typing import List
l: List[int] = [1, 2, 3]

11.例举你知道 Python 对象的命名规范,例如方法或者类等

类:总是使用首字母大写单词串,如 MyClass。内部类可以使用额外的前导下划线。 
变量:小写,由下划线连接各个单词。方法名类似
常量:常量名所有字母大写 等

12.Python 中的注释有几种?
单行注释以#开头

# 单行注释

多行注释使用三个双引号或者三个单引号

"""
多行
注释
"""

13.如何优雅的给一个函数加注释?
在函数冒号后按回车,然后输入三个双引号或单引号按回车,为函数添加文档字符串描述

14.如何给变量加注释?
变量注释使用行内注释,在代码后至少2个空格,注释由#和一个空格开始。

user = "Tom"  # 用户姓名

15.Python 代码缩进中是否支持 Tab 键和空格混用。
建议使用4个空格缩进,Tab和空格混用在不用的编辑器中可能会对不齐。

16.是否可以在一句 import 中导入多个库?
可以在一行import中导入多个库,但是不建议,不利于阅读和维护

17.在给 Py 文件命名的时候需要注意什么?
不能用Python中的关键字命名;
不能用Python标准库和常用第三方库命名;
只能使用数字、字母和下划线,并且以字母和下划线开头。

18.例举几个规范 Python 代码风格的工具
Pylint、Black、Autopep8、flake8

数据类型

字符串

19.列举 Python 中的基本数据类型?

20.如何区别可变数据类型和不可变数据类型

21.将"hello world"转换为首字母大写"Hello World"

22.如何检测字符串中只含有数字?

23.将字符串"ilovechina"进行反转

24.Python 中的字符串格式化方式你知道哪些?

25.有一个字符串开头和末尾都有空格,比如“ adabdw ”,要求写一个函数把这个字符串的前后空格都去掉。

26.获取字符串”123456“最后的两个字符。

27.一个编码为 GBK 的字符串 S,要将其转成 UTF-8 编码的字符串,应如何操作?

  1. (1)s="info:xiaoZhang 33 shandong",用正则切分字符串输出'info', 'xiaoZhang', '33', 'shandong' a = "你好 中国 ",去除多余空格只留一个空格。

  2. (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.按照字典的内的年龄排序

38.请合并下面两个字典 a = {"A":1,"B":2},b = {"C":3,"D":4}

39.如何使用生成式的方式生成一个字典,写一段功能代码。

40.如何把元组("a","b")和元组(1,2),变为字典{"a":1,"b":2}

综合

41.Python 常用的数据结构的类型及其特性?

42.如何交换字典 {"A":1,"B":2}的键和值?

43.Python 里面如何实现 tuple 和 list 的转换?

44.我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?

45.请将[i for i in range(3)]改成生成器

46.a="hello"和 b="你好"编码成 bytes 类型

47.下面的代码输出结果是什么?

48.下面的代码输出的结果是什么?

操作类题目

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.下面代码会存在什么问题,如何改进?

57.一行代码输出 1-100 之间的所有偶数。

58.with 语句的作用,写一段代码?

59.python 字典和 json 字符串相互转化方法

60.请写一个 Python 逻辑,计算一个文件中的大写字母数量

  1. 请写一段 Python连接 Mongo 数据库,然后的查询代码。

62.说一说 Redis 的基本类型。

  1. 请写一段 Python连接 Redis 数据库的代码。

  2. 请写一段 Python 连接 MySQL 数据库的代码。

65.了解 Redis 的事务么?

66.了解数据库的三范式么?

67.了解分布式锁么?

68.用 Python 实现一个 Reids 的分布式锁的功能。

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.使用正则表达式匹配出<html><h1>百度一下,你就知道</html>中的地址

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.已知:

(1) 从 AList 和 BSet 中 查找 4,最坏时间复杂度那个大?

(2) 从 AList 和 BSet 中 插入 4,最坏时间复杂度那个大?

123.用 Python 实现一个二分查找的函数

124.python 单例模式的实现方法

125.使用 Python 实现一个斐波那契数列

126.找出列表中的重复数字

127.找出列表中的单个数字

128.写一个冒泡排序

129.写一个快速排序

130.写一个拓扑排序

131.python 实现一个二进制计算

132.有一组“+”和“-”符号,要求将“+”排到左边,“-”排到右边,写出具体的实现方法。

133.单链表反转

134.交叉链表求交点

135.用队列实现栈

136.找出数据流的中位数

137.二叉搜索树中第 K 小的元素

爬虫相关

138.在 requests 模块中,requests.content 和 requests.text 什么区别

139.简要写一下 lxml 模块的使用方法框架

140.说一说 scrapy 的工作流程

141.scrapy 的去重原理

142.scrapy 中间件有几种类,你用过哪些中间件

143.你写爬虫的时候都遇到过什么?反爬虫措施,你是怎么解决的?

144.为什么会用到代理?

145.代理失效了怎么处理?

146.列出你知道 header 的内容以及信息

147.说一说打开浏览器访问 百度一下,你就知道 获取到结果,整个流程。

148.爬取速度过快出现了验证码怎么处理

149.scrapy 和 scrapy-redis 有什么区别?为什么选择 redis 数据库?

150.分布式爬虫主要解决什么问题

151.写爬虫是用多进程好?还是多线程好? 为什么?

152.解析网页的解析器使用最多的是哪几个

153.需要登录的网页,如何解决同时限制 ip,cookie,session(其中有一些是动态生成的)在不使用动态爬取的情况下?

154.验证码的解决(简单的:对图像做处理后可以得到的,困难的:验证码是点击,拖动等动态进行的?)

155.使用最多的数据库(mysql,mongodb,redis 等),对他的理解?

网络编程

156.TCP 和 UDP 的区别?

157.简要介绍三次握手和四次挥手

158.什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?

并发

159.举例说明 conccurent.future 的中线程池的用法

160.说一说多线程,多进程和协程的区别。

161.简述 GIL

162.进程之间如何通信

163.IO 多路复用的作用?

164.select、poll、epoll 模型的区别?

165.什么是并发和并行?

166.一个线程 1 让线程 2 去调用一个函数怎么实现?

167.解释什么是异步非阻塞?

168.threading.local 的作用?

Git 面试题

169.说说你知道的 git 命令

170.git 如何查看某次提交修改的内容

————————————————
问题转载自CSDN博客
原文链接:https://blog.csdn.net/csdngkk/article/details/99116607

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容