python面试题,
python面试题,
注意:只有必答题部分计算分值,补充题不计算分值。
第一部分 必答题(每题2分)
-
简述列举了解的编程语言及语言间的区别?
编译型和解释型
编译型:c,java
特点是只一次编译
执行效率高,开发效率慢
解释型:python
多次编译,一行两行就可以编译一次
执行效率低,开发效率高
-
列举Python2和Python3的区别?
py2没中文
py2中print加引号
py3中print加括号
py2中整数相除没有浮点数
如果小数相除他会保一位小数
py3整数相除也保留浮点数
py2xrange和py3的range一样是个生成器
py2的range是个列表,
py3没xrange
py2中二进制不用加前缀0b
py3中必须加前缀
py2中<>是不等于,py3没了
-
看代码写结果
v1 = 1 or 2 1
v2 = 3 and 7 or 9 and 0 3 -
比较以下值有什么不同?
v1 = [1,2,3] 数字
v2 = [(1),(2),(3)] 数字
v3 = [(1,),(2,),(3,)] 元组 -
用一行代码实现数值交换。
a = 1 a,b=b,a
b = 2 -
Python中单引号、双引号、三引号的区别?
单双都是表示字符串
三是注释
-
is和==的区别?
is是内存和内容都要一样
==是内容一样
-
python里如何实现tuple和list的转化?
set()
list()
-
如何实现字符串
name='老男孩'
的反转?a='老男孩'
b=a[::-1]
print(b) -
两个set如何获取交集、并集、差集?
$
|
-
-
那些情况下, y != x - (x-y)会成立?
两个不同的集合
-
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 乘法表。
for i in range(1, 10):
for j in range(1, i+1):
print(f'{j}x{i}={i*j}',end=' ')
print()
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81 -
用Python显示一个斐波那契数列。
输出前n项
x=input("写几个斐波那契:")
def m():
a=0
b=1
while 1:
a,b=b,a+b
yield a
for i in range(int(x)):
print(next(m()))
输出你要的第几项
q=input("输入你要的第几项:")
q=int(q)
def f(n):
if n ==0 or n==1:
return 1
else:
return f(n-1)+f(n-2)
print(f(q)) -
如何删除列表中重复的值?
set()变成集合
-
一个大小为100G的文件etl_log.txt, 要读取文件中的内容, 写出具体过程代码?
-
a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 请问a是什么?
-
lambda关键字的作用?
-
*arg
和**kwarg
作用?在形参时
*args接收位置参数,并将它们写到元组里输出出来
**kwargs接收关键字参数,并将他们写到字典中输出出来
在print时
args输出元组
kwargs输出字典
*kwargs取关键字,而不是值,就是字典的键
*args会将原来的元组打散
-
如何在函数中设置一个全局变量 ?
global a=1
-
filter、map、reduce的作用?
filter() # 过滤 把可迭代对象进行迭代,把每一项数据都传给前面的函数,根据函数返回的True或者False来决定元素是否保留.
map() # 对象映射 把可迭代对象中每一项函数传递给前面的函数,函数的执行结果作为整个运算的结果
reduce 累计算,索引1和索引2计算,结果相加索引3再计算
-
什么是匿名函数?匿名函数有什么作用?
lambda写法简便
-
Python递归的最大层数?
1000
-
什么是迭代器?什么是可迭代对象?
既有__iter__又有__next__就是迭代器
有__iter__方法就是可迭代对象 -
什么是生成器?
函数中有yield
-
什么是装饰器及应用场景?
不改动源代码,在源代码执行之前加一些操作
-
什么是反射及应用场景?
用字符串去调用类中的方法
-
写一个普通的装饰器。
def func(f):
def inner():
print("函数调用之前")
f()
print("函数调用之后")
return inner -
写一个带参数的装饰器。
def wrapper(a):
def func(f):
def inner(k):
print(a)
print(type(a))
b=int(a)
if b:
ret = f(k)
return ret+2
else:
print("sdfg")
return 123
return inner
return func -
求结果
def num():
return [lambda x:i*x for i in range(4)]
print([m(2) for m in num()])
6666 -
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 = ?
a='10.3.9.12'
def c(n):
a,b,c,d=n.split(".")
a=format(int(a),'08b')
b=format(int(b),'08b')
c=format(int(c),'08b')
d=format(int(d),'08b')
return a,b,c,d
print(c(a))
-
请查找一个目录下的所有文件(可能存在文件嵌套)。
-
求结果
import math
print (math.floor(5.5))
5 -
是否使用过functools中的函数?其作用是什么?
-
re的match和search区别?
match找一个就停了
search一直找
-
用Python匹配HTML tag的时候,<.>和<.?>有什么区别?
-
如何生成一个随机数?
import random
print(random.random()) # 0 ~ 1 0~1随机浮点数
print(random.uniform(1,10)) # 1 ~ 10 随机浮点数
print(random.randint(1,50)) # 1 ~ 50(闭区间) 随机整数
print(random.randrange(1,5,2)) # randrange(起始,终止,步长) 递增集合中的随机一个数
print(random.choice([1,2,3,4,5,])) # 选择一个元素
print(random.choices([1,2,3,4,5,],k=2)) # 选择两(根k值有关)个元素,会有重复
print(random.sample((1,2,3,4,5),k=2)) # 选择两个元素,不会有重复(除非只有两个) -
super的作用?
-
双下划线和单下划线的区别?
-
@staticmethod和@classmethod的区别?
静态方法,与类无关直接调用函数一样去调用该方法
类方法,只能有类去调用的方法
-
实现一个单例模式(加锁)。
import time
import threading
class Singleton(object):
instance = None
lock = threading.RLock() #锁放类里面当属性
def __new__(cls, *arg, **kwargs):
if cls.instance:
return cls.instance
with cls.lock: #用类去调用锁
if not cls.instance:
cls.instance = object.__new__(cls)
return cls.instance
def task():
obj = Singleton()
print(obj)
for i in range(10):
t = threading.Thread(target=task)
t.start() -
栈和队列的区别?
队列先进先出,栈先进后出。
-
以下代码输出是什么? 请给出答案并解释。
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
1 2 1
3 2 3 -
参考下面代码片段
class Context:
pass
with Content() as ctx:
ctx.do_something()
请在Context类下添加代码完成该类的实现
第二部分 可选题
-
如何获取列表中第二大的值?
-
-
简述Python的垃圾回收机制。
-
请用两个队列来实现一个栈。
-
请用Python实现一个链表。
-
请用Python实现链表的逆转。
-
相关内容
- 暂无相关文章
评论关闭