python基础篇
Python面试重点(基础篇)
注意:只有必答题部分计算分值,补充题不计算分值。
第一部分 必答题(每题2分)
-
简述列举了解的编程语言及语言间的区别?
编译型:只翻译一次(代表语言C) 优点:执行速度快 缺点:开发速度慢 解释型:逐行翻译(代表语言python) 优点:开发速度快 缺点:执行速度慢
-
列举Python2和Python3的区别?
1.python解释器默认编码(python2与python3的区别一) python2 解释器默认编码:ascii python3 解释器默认编码:utf-8 2.输入(python2与python3的区别二) python2:name=raw_input('请输入姓名') python3:name=input('请输入你的姓名') 3.输出(python2与python3的区别三) python2:print "你好" python3:print("你好") 字符串不同 py2中有两种数据类型:unicode str py3中有两种数据类型:str bytes py2中的str,就是py3中的bytes py2中的unicode,就是py3中str 例如: py2: val = u"changxinzuoxia" => unicode val = "changxinzuoxia" => str py3: val = "chanxin" => str val = b"chanxin" => bytes range: py2: range xrange py3: range 类型: py2: int long p3: int 字典: v = {"k1":1,"k2":2} py2,立即将数据放到内存。 v.keys(),得到列表 v.values(),得到列表 v.items(),得到列表 py3: v.keys(),迭代器 v.values(),迭代器 v.items(),迭代器 map、filter py2: 立即得到结果 py3: 迭代器 类: py2: 经典类、新式类(直接或间接继承object) py3: 新式类
-
看代码写结果
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,)] v1 是普通列表,元素为int v2 是列表里面加了小括号,和v1一样,int类型 v3 列表嵌套元祖,元组的元素为int
-
用一行代码实现数值交换。
a = 1 b = 2 a,b = b,a
-
Python中单引号、双引号、三引号的区别?
python单引号,双引号,三引号都是字符串且可以进行转义,唯一的差别就是三引号 可以显示多行。
-
is和==的区别?
is是判断内存地址是否一致 ==是两者的值是否一样
-
python里如何实现tuple和list的转化?
tuple(list) # 列表转元组 list(tuple) # 元组转列表
-
如何实现字符串
name='老男孩'
的反转?name = "老男孩" name = name[::-1]
-
两个set如何获取交集、并集、差集?
# 交集 set(a)&set(b) # 并集 set(a)|set(b) # 差集 set(a)-set(b)
-
那些情况下, y != x - (x-y)会成立?
x,y是两个不相等的非空集合
-
Python中如何拷贝一个对象?
# copy模块 [:] copy.copy() # 浅拷贝 copy.deepcopy() # 深拷贝
-
简述 赋值、浅拷贝、深拷贝的区别?
在Python中拷贝的目的就是要再创建一份,拷贝都是针对可变类型而言。 例如: data = [1,2,[11,22]] 浅拷贝, 只拷贝第一层. new_data = copy.copy(data) 相当于:[1拷贝一份,2拷贝一份,[11,22]用原来的内存地址] 理论 相当于:[1,2,[11,22]用原来的内存地址] 实际 深拷贝,所有层都拷贝。 new_data = copy.deepcopy(data) 相当于:[1,2,[11,22]重新拷贝一份] 总结:Python中所有的拷贝都是针对可变类型而言,浅拷贝就是指拷贝数据的第一层,遇到可变类型只能拷贝他的内存地址,数据不会重新创建。 而对于深拷贝,会将所有的可变类型数据都拷贝一份。
-
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) # [1,2,4,5,['b','c','d'],5] print(c) # [1,2,4,5,['b','c','d']] print(a) # [1,2,4,5,['b','c','d'],5]
-
用Python实现9 * 9 乘法表。
result = "\n".join([" ".join([ "%s*%s=%s " %(i,j,i*j) for j in range(1,i+1)]) for i in range(1,10)])
-
用Python显示一个斐波那契数列。
# 1 1 2 3 5 8 13 21 ... def fib(num): if num in [1,2]: return 1 return fib(num-1) + fib(num-2) def fib(num): if num in [1,2]: return 1 first = 1 second = 1 for i in range(3,num+1): first,second =second,first + second return second
-
如何删除列表中重复的值?
list(set(list))
-
一个大小为100G的文件etl_log.txt, 要读取文件中的内容, 写出具体过程代码?
with open(r'etl_log.txt','r',enconding='utf-8') as f: for i in f: info = f.readlines() print(info)
-
a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 请问a是什么?
a是字典, a = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
-
lambda关键字的作用?
定义匿名函数,自带for循环
-
*arg
和**kwarg
作用?*args 接收多余的位置参数 **kwargs 接收多余的关键字参数
-
如何在函数中设置一个全局变量 ?
global 全局变量
-
filter、map、reduce的作用?
filter 过滤 map 映射 reduce 累计算
-
什么是匿名函数?匿名函数有什么作用?
lambda函数就是匿名函数 作用:简化代码
-
Python递归的最大层数?
官方:1000 实测:995-998
-
什么是迭代器?什么是可迭代对象?
迭代器:内部具有 __next__方法,获取下一个值,只能前进不能倒退。 可迭代对象:内部具有 __iter__ 方法且返回一个迭代器。 class Foo: def __iter__(self,*args,**kwargs): return iter([11,22,33]) obj = Foo() for item in obj: print(item)
-
什么是生成器?
具有yield的关键字就是生成器,生成器的本质是迭代器 装饰器的本质是闭包,在不修改源代码及其调用方式的前提下,外增加功能
-
什么是装饰器及应用场景?
登录,类
-
什么是反射及应用场景?
通过字符串操作对象的方法和属性 判断用户的输入
-
写一个普通的装饰器。
def warpper(func): def inner(): print("111") func() print("222") return inner @warpper def func(): print("被装饰的函数")
-
写一个带参数的装饰器。
def func_z(func): def inner(*args,**kwargs): print("我是装饰器,装饰你了啊") ret = func(*args,**kwargs) return ret return inner @func_z def func_b(*args,**kwargs): print("我是被装饰的函数,来啊,你过来啊")
-
求结果
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) # [1] v2 = func(2,[10,20]) print(v2) # [10,20,2] v3 = func(3) print(v3) # [1,3]
-
请编写一个函数实现将IP地址转换成一个整数。
如 10.3.9.12 转换规则为: 10 00001010 3 00000011 9 00001001 12 00001100 再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
-
请查找一个目录下的所有文件(可能存在文件嵌套)。
import os os.listdir()
-
求结果
import math print (math.floor(5.5)) #5
-
是否使用过functools中的函数?其作用是什么?
from functools import reduce reduce 累计算
-
re的match和search区别?
match: 从开头进行查找,查找到就停止,找不到返回None search: 查找全文,找到就停止,找不到就返回None
-
用Python匹配HTML tag的时候,<.>和<.?>有什么区别?
.* 贪婪匹配 匹配多个任意字符 .*? 非贪婪 只匹配一次
-
如何生成一个随机数?
import random random.random()
-
super的作用?
按照mro的顺序进行继承
-
双下划线和单下划线的区别?
双线划线:__ 是Python中强制定义为私有 单下划线:_ 是程序员约定的私有方法
-
@staticmethod和@classmethod的区别?
-
实现一个单例模式(加锁)。
-
栈和队列的区别?
栈:先进后出 队列:先进先出
-
以下代码输出是什么? 请给出答案并解释。
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实现链表的逆转。