Python面试重点(基础篇)
第一部分 必答题(每题2分)
简述列举了解的编程语言及语言间的区别?
C语言:Java,Python,底层均是有C语言开发完成 Java:用户量最高的语言. PHP:网站的快速开发 Python:语言简洁,代码流畅,第三方库比较多
列举Python2和Python3的区别?
python2: range xrange python3: range python2中有两种数据类型:unicode str python3中有两种数据类型:str bytes python2: 经典类、新式类(直接或间接继承object) python3: 新式类
看代码写结果
v1 = 1 or 2 1 v2 = 3 and 7 or 9 and 0 7
比较以下值有什么不同?
v1 = [1,2,3] v2 = [(1),(2),(3)] v3 = [(1,),(2,),(3,)] 1和2没什么太大区别,3的话(1,)表示是一个元组,(1)表示的是里面元素本身的类型
用一行代码实现数值交换。
a = 1 b = 2 a,b = b,a
Python中单引号、双引号、三引号的区别?
单双引号都可以用来标识一个字符串 三引号是注释
is和==的区别?
is 判断两边的内存地址id是否一致 == 判断等号两边的值是否相等
python里如何实现tuple和list的转化?
Tuple是元组的意思,元组是不能修改的;list是列表的意思,列表是可以修改的;在Python中实现Tuple和list的转换可以通过两个函数list()、Tuple()实现转换。举例如下:将元组a转换为列表b,b=list(a)将列表b转换为元组a,a=Tuple(b)
如何实现字符串
name='老男孩'
的反转?1.切片 name = name[::-1] 2.列表的reverse方法 name = list(name) name.reverse() name = ''.join(name) #name = ''.join(name[::-1])
两个set如何获取交集、并集、差集?
交集 & 并集 | 差集 -
那些情况下, y != x - (x-y)会成立?
两个不相等的非空集合
Python中如何拷贝一个对象?
copy模块 copy.copy() copy.deepcopy()
简述 赋值、浅拷贝、深拷贝的区别?
赋值:让多个变量同时指向一个对象的内存地址。不可变对象在赋值时会开辟新空间。可变对象在赋值时,修改一个的值,另一个也会发生改变。 浅拷贝:(copy模块的copy.copy()函数),浅拷贝在拷贝时,只拷贝第一层中的引用,如果元素是可变对象,并且被修改,那么拷贝的对象也会发生变化。####拷贝第一层元素内存地址 深拷贝:完全拷贝了父对象及其子对象。深拷贝就是将顶级对象以及子对象的值同时复制给新对象,此时修改任何一个都不会影响另一个。{copy模块的 copy.deepcopy()函数}####不管多少层,不可变共有,可变开辟新空间
pass的作用?
占位符
阅读代码写结果。
import copy a = [1,2,4,5,['b','c']] b = a c = copy.copy(a) d = copy.deepcopy(a) a.append(5) a[4].append('d') print(b) print(c) print(a) b = ['1','2','4','5',['b','c','d'],'5'] c = ['1','2','4','5',['b','c','d']] d = ['1','2','4','5',['b','c','d'],'5']
用Python实现9 * 9 乘法表。
用Python显示一个斐波那契数列。
lst = [1,1] for i in range(10): lst.append()
如何删除列表中重复的值?
set list(set(list))
一个大小为100G的文件etl_log.txt, 要读取文件中的内容, 写出具体过程代码?
for i in 文件句柄
a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 请问a是什么?
字典
lambda关键字的作用?
匿名函数
*arg
和**kwarg
作用?接收多余的位置参数 接收对于的关键字参数
如何在函数中设置一个全局变量 ?
global name
filter、map、reduce的作用?
过滤 映射 累计算
什么是匿名函数?匿名函数有什么作用?
lambda 匿名函数,俗称一行函数 配合高阶函数使用
Python递归的最大层数?
官方说明是1000 实际是994-998
什么是迭代器?什么是可迭代对象?
__iter__()和__next__() __iter__()
什么是生成器?
生成器的本质就是一个迭代器 具有yield关键字就是生成器
什么是装饰器及应用场景?
装饰器的本质就是闭包 在不修改源代码,以及调用方式的情况下,额外的增加新功能 类 登录验证
什么是反射及应用场景?
通过字符串操作对象的方法及属性 场景 CBV 用户输入
写一个普通的装饰器。
def func(a): def foo(*args,**kwargs) ret = a("*args,**kwargs") return ret return foo @func def f1(*args,**kwargs): print(f"这是一个{args}") return "我可以返回了" f1(1,2,3,34,4,5)
写一个带参数的装饰器。
def startEnd(fun): def wraper(name): print("!!!!!!!!!!!!start!!!!!!!!!") fun(name) print("!!!!!!!!!!!!!end!!!!!!!!!") return wraper hello() @startEnd def hello(name): print("hello {0}".format(name)) hello("boy")
求结果
def num(): return [lambda x:i*x for i in range(4)] print([m(2) for m in num()]) [6,6,6,6]
def(a, b=[])这种写法有什么陷阱?
默认参数是可变类型 闭包
看代码写结果
def func(a,b=[]): b.append(a) return b v1 = func(1) v2 = func(2,[10,20]) v3 = func(3) print(v1,v2,v3) [1, 3] [10, 20, 2] [1, 3]
看代码写结果
def func(a,b=[]): b.append(a) return b v1 = func(1) print(v1) v2 = func(2,[10,20]) print(v2) v3 = func(3) print(v3) [1] [10, 20, 2] [1,3]
请编写一个函数实现将IP地址转换成一个整数。
如 10.3.9.12 转换规则为: 10 00001010 3 00000011 9 00001001 12 00001100 再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
请查找一个目录下的所有文件(可能存在文件嵌套)。
os.walk()
求结果
import math print (math.floor(5.5)) 5
是否使用过functools中的函数?其作用是什么?
re的match和search区别?
match 从开头进行匹配,匹配一个就停止 search 从任意位置进行匹配 匹配一个就停止
用Python匹配HTML tag的时候,<.>和<.?>有什么区别?
. 贪婪匹配 匹配多个任意字符 .*? 非贪婪 只匹配一次
如何生成一个随机数?
random random.random()
super的作用?
按照mro的顺序进行继承
双下划线和单下划线的区别?
__a = 10 强制私有 _b = 15 程序员约定俗成这是一个私有方法
@staticmethod和@classmethod的区别?
一个是静态方法 普通函数 一个是类方法
实现一个单例模式(加锁)。
import threading import time class Singleton: instance = None lock = threading.RLock() def __init__(self, name): self.name = name def __new__(cls, *args, **kwargs): if cls.instance: return cls.instance with cls.lock: if cls.instance: return cls.instance time.sleep(0.1) cls.instance = object.__new__(cls) return cls.instance def task(): obj = Singleton('x') print(obj) for i in range(10): t = threading.Thread(target=task) t.start() data = Singleton('asdfasdf') print(data
栈和队列的区别?
栈 先进后出 队列 先进先出
以下代码输出是什么? 请给出答案并解释。
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
参考下面代码片段
class Context: pass with Content() as ctx: ctx.do_something() 请在Context类下添加代码完成该类的实现
第二部分 可选题
- 如何获取列表中第二大的值?
- 简述Python内存管理机制。
- 简述Python的垃圾回收机制。
- 请用两个队列来实现一个栈。
- 请用Python实现一个链表。
- 请用Python实现链表的逆转。