2021年大学生毕业季python面试宝典!看着真香!限时分享3天
内容介绍
该宝典是一份知识点全面又能不断更新,与时俱进的学习手册,不仅收录了作者亲身面试遇到的问题,还收录了近上万名学子面试时遇到的问题。我们会一直不断地更新和充实该宝典,同时也希望 读者朋友能够多多提供优质的面试题,也许下一个版本就有你提供的面试题哦。注意:该面试宝典仅供参考,由于作者的知识水平有限加之编写时间仓促因此难免有 bug 的存在,希望大家见谅。该宝典的一个明确目标是能够让 90%以上的 Python 技术面试题都落到该宝典中。让天下没有难学的知识,希望你我的努力能帮到更多的莘莘学子。世间事,很多都可投机取巧,但技术却必须靠日积月累的努力来提高。本宝典更加注重的是知识的掌握,而不仅仅是对面试题的应付。在展示常见的面试问题以及回答技巧的同时还详细讲解了每一道题所包含的知识点,让读者不仅知其然,更知其所以然。
Python 基础
一、基础语法
1. 输入与输出
1.1 代码中要修改不可变数据会出现什么问题? 抛出什么异常?
代码不会正常运行,抛出 TypeError 异常。
1.2 a=1,b=2,不用中间变量交换 a 和 b 的值?
方法一:
1. a = a+b
2. b = a-b
3. a = a-b
方法二:
1. a = a^b
2. b =b^a
3. a = a^b
方法三:
1. a,b = b,a
1.3 print 调用 Python 中底层的什么方法?)
print 方法默认调用 sys.stdout.write 方法,即往控制台打印字符串。
1.4 下面这段代码的输出结果将是什么?请解释?(
1. class Parent(object):
. x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
print Parent.x, Child1.x, Child2.x
Child1.x = 2
print parent.x, Child1.x, Child2.x
parent.x = 3
print Parent.x, Child1.x, Child2.x
结果为:
1 1 1 #继承自父类的类属性 x,所以都一样,指向同一块内存地址。
1 2 1 #更改 Child1,Child1 的 x 指向了新的内存地址。
3 2 3 #更改 Parent,Parent 的 x 指向了新的内存地址。
1.5 简述你对 input()函数的理解?
在 Python3 中,input()获取用户输入,不论用户输入的是什么,获取到的都是字符串类型的。
在 Python2 中有 raw_input()和 input(), raw_input()和 Python3 中的 input()作用是一样的,
input()输入的是什么数据类型的,获取到的就是什么数据类型的。
2. 条件与循环
2.1 阅读下面的代码,写出 A0,A1 至 An 的最终值。
1. A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))
2. A1 = range(10)
3. A2 = [i for i in A1 if i in A0]
4. A3 = [A0[s] for s in A0]
5. A4 = [i for i in A1 if i in A3]
6. A5 = {i:i*i for i in A1}
7. A6 = [[i,i*i] for i in A1]
答:
1. A0 = {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}
A1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
A2 = []
A3 = [1, 3, 2, 5, 4]
A4 = [1, 2, 3, 4, 5]
A5 = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
A6 = [[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25], [6, 36],[7, 49],[8, 64] [9,81]]
2.2 range 和 xrange 的区别?
两者用法相同,不同的是 range 返回的结果是一个列表,而 xrange 的结果是一个生成器,前者是
直接开辟一块内存空间来保存列表,后者是边循环边使用,只有使用时才会开辟内存空间,所以当列表
很长时,使用 xrange 性能要比 range 好。
2.3 考虑以下 Python 代码,如果运行结束,命令行中的运行结果是什么?
1. l = []
2. for i in xrange(10):
3. l.append({‘num’:i})
4. print l
在考虑以下代码,运行结束后的结果是什么?
1. l = []
2. a = {‘num’:0}
3. for i in xrange(10):
4. a[‘num’] = i
5. l.append(a)
6. print l
以上两段代码的运行结果是否相同,如果不相同,原因是什么?
上方代码的结果:
1. [{‘num’:0},{‘num’:1},{‘num’:2},{‘num’:3},{‘num’:4},{‘num’:5},{‘num’:6},{‘num’:7},{‘num’:8},{‘num’:9}]
下方代码结果:
1. [{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9}]
原因是:字典是可变对象,在下方的 l.append(a)的操作中是把字典 a 的引用传到列表 l 中,当后
续操作修改 a[‘num’]的值的时候,l 中的值也会跟着改变,相当于浅拷贝。
2.4 以下 Python 程序的输出?)
1. for i in range(5,0,-1):
2. print(i)
答:5 4 3 2 1
3. 文件操作
3.1 4G 内存怎么读取一个 5G 的数据?(2018-3-30-lxy)
方法一:
可以通过生成器,分多次读取,每次读取数量相对少的数据(比如 500MB)进行处理,处理结束后在读取后面的 500MB 的数据。
方法二:
可以通过 linux 命令 split 切割成小文件,然后再对数据进行处理,此方法效率比较高。可以按照行数切割,可以按照文件大小切割。
3.2 现在考虑有一个 jsonline 格式的文件 file.txt 大小约为 10K,之前处理文件的
代码如下所示:(2018-3-30-lxy)
def get_lines():
l = []
with open(‘file.txt’,‘rb’) as f:
for eachline in f:
l.append(eachline)
return l
if __name__ == ‘__main__’:
for e in get_lines():
process(e) #处理每一行数据
现在要处理一个大小为 10G 的文件,但是内存只有 4G,如果在只修改 get_lines 函数而其他代码保持不变的情况下,应该如何实现?需要考虑的问题都有哪些?
1. def get_lines():
l = []
with open(‘file.txt’,’rb’) as f:
data = f.readlines(60000)
l.append(data)
yield l
要考虑到的问题有:
内存只有 4G 无法一次性读入 10G 的文件,需要分批读入。分批读入数据要记录每次读入数据的位置。分批每次读入数据的大小,太小就会在读取操作上花费过多时间。
3.3 read、readline 和 readlines 的区别? (2018-4-16-lxy)
read:读取整个文件。
readline:读取下一行,使用生成器方法。
readlines:读取整个文件到一个迭代器以供我们遍历。
3.4.补充缺失的代码?(2018-4-16-lxy)
1.def print_directory_contents(sPath):
"""
这个函数接收文件夹的名称作为输入参数
返回该文件夹中文件的路径
以及其包含文件夹中文件的路径
"""
# 补充代码
------------代码如下--------------------
import os
for sChild in os.listdir(sPath):
sChildPath = os.path.join(sPath, sChild)
if os.path.isdir(sChildPath):
print_directory_contents(sChildPath)
else:
print(sChildPath)
4. 异常
4.1在except中return后还会不会执行finally中的代码?怎么抛出自定义异常?
(2018-3-30-lxy)
会继续处理 finally 中的代码;用 raise 方法可以抛出自定义异常。4.2 介绍一下 except 的作用和用法?(2018-4-16-lxy)
except: #捕获所有异常
except: <异常名>: #捕获指定异常
except:<异常名 1, 异常名 2> : 捕获异常 1 或者异常 2
except:<异常名>,<数据>:捕获指定异常及其附加的数据
except:<异常名 1,异常名 2>:<数据>:捕获异常名 1 或者异常名 2,及附加的数据
今天就先给大家分享到这里了,剩下的有想要python面试宝典的同学可以转发文章+私信小编(学习)即可获得这本python面试最佳宝典
想要python面试宝典的同学可以转发文章+私信小编(学习)即可获得这本python面试最佳宝典