python基础面试题1
注意:只有必答题部分计算分值,补充题不计算分值。
第一部分 必答题(每题2分)
-
简述列举了解的编程语言及语言间的区别?
c语言是编译型语言,运行速度快,但翻译时间长
python是解释性语言,开发效率高,但运行速度慢
java必须声明变量,python并不需要声明变量 -
列举Python2和Python3的区别?
python2:源码不统一,源码重复,有整型和长整形,使用asii编码,print后不用加括号
python3:源码统一,源码不重复,全都是整型,使用utf-8编码,print'后必须加括号
-
看代码写结果
v1 = 1 or 2 true
v2 = 3 and 7 or 9 and 0 -
比较以下值有什么不同?
v1 = [1,2,3]
v2 = [(1),(2),(3)]
v3 = [(1,),(2,),(3,)] -
用一行代码实现数值交换。
a = 1
b = 2
a,b = b,a -
Python中单引号、双引号、三引号的区别?
单双引号都可以在括号内使用(" '内容' ")
三引号可以显示多行,注释 -
is和==的区别?
is判断两边的内存地址是否相等
==判断等号两边的值是否相等 -
python里如何实现tuple和list的转化?
list=[1,2,3,4,5,6]
x=tuple(list)
print(type(x),x)
tup=(1,2,3,4,5,6)
y=list(tup)
print(type(y),y) -
如何实现字符串
name='老男孩'
的反转?使用字符串切片 name1=name[::-1]
-
两个set如何获取交集、并集、差集?
a=set('asdfg')
b=set('qwert')
交集:
print(x&y)
并集:
print(x|y)
差集:
print(x-y) -
那些情况下, y != x - (x-y)会成立?
x和y是两个不相等的非空集合
-
Python中如何拷贝一个对象?
可以使用浅拷贝拷贝父对象,也可以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) -
用Python实现9 * 9 乘法表。
l=1
i=0
while l<10:
i=1
while i<=l:
if i==l:
print(i,'*',l,'=',l*i)
else:
print(i,'*',l,'=',l*i,end=' ')
i += 1
l += 1 -
用Python显示一个斐波那契数列。
a,b = 0, 1
while b<100:
print (b),
a, b = b, a+b -
如何删除列表中重复的值?
list1=["1","1","2","3list1"]
list1=list(set(list1))
list1.remove("1")
print(list1)
print(list(set(list1)))
print(sorted(list(set(list1))))
在列表中元素值少的情况下,可以直接用索引删除指定重复的值 -
一个大小为100G的文件etl_log.txt, 要读取文件中的内容, 写出具体过程代码?
-
a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 请问a是什么?
-
lambda关键字的作用?
-
*arg
和**kwarg
作用?在定义函数时,允许我们传入多个实参
-
如何在函数中设置一个全局变量 ?
-
-
什么是匿名函数?匿名函数有什么作用?
一行函数
减少不必要的函数暴露,提高代码的可读性 -
Python递归的最大层数?
998
-
什么是迭代器?什么是可迭代对象?
迭代器是一个对象且迭代器只能使用一次
迭代器生辰后的对象就是迭代器对象 -
什么是生成器?
生成器是一次生成一个值的特殊类型函数,生成器的本质就是迭代器
-
什么是装饰器及应用场景?
装饰器本质上是⼀个python函数,它可以在让其他函数在不需要做任何代码的变动的前提下增加额外的功能;
应用场景:
计算函数运行次数;
插入日志,作为函数的运行日志;
缓存,实现缓存处理; -
什么是反射及应用场景?
通过字符创操作对象的属性和方法
-
写一个普通的装饰器。
def warpper(f):
def inner(*args,**kwargs):
print("被装饰函数执行前")
ret = f(*args,**kwargs)
print("被装饰函数执行后")
return ret
return inner
def func(*args,**kwargs):
print(f"被装饰的{args,kwargs}")
return "这是func函数"
func = warpper(func)
print(func(1,2,3,a=1)) -
写一个带参数的装饰器。
def auth(argv):--接收参数
def warpper(func):
def inner(*args,**kwargs):
if argv == '博客园':
print('欢迎登陆博客园')
user = input(userse)
pwd = input('pwd')
if user =='alex' and pwd =='ds12':
func(*args,**kwargs)
elif argv == '码云':
print('欢迎登陆码云')
user = input(userse)
pwd = input('pwd')
if user =='ale' and pwd =='ds23':
func(*args,**kwargs)
return inner
return warpper
def foo():
print('被装饰的函数')
a = auth("111")
foo = a(foo)
foo() -
求结果
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=[])这种写法有什么陷阱?
当第一次执行的时候实例化了一个list,第二次执行还是用第一次执行的时候实例化的地址存储,所以三次执行的结果就是 [1, 1, 1]
-
看代码写结果
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)
结果: -
请编写一个函数实现将IP地址转换成一个整数。
如 10.3.9.12 转换规则为:
10 00001010
3 00000011
9 00001001
12 00001100
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ? -
请查找一个目录下的所有文件(可能存在文件嵌套)。
-
求结果
import math
print (math.floor(5.5))
结果:5 -
是否使用过functools中的函数?其作用是什么?
生成一个固定参数的新函数
-
re的match和search区别?
match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none
search()会扫描整个字符串并返回第一个成功的匹配: -
用Python匹配HTML tag的时候,<.>和<.?>有什么区别?
<.*>尽可能多的匹配,就是匹配到的字符串尽量长,<.*?>是尽可能少的匹配,就是匹配到的字符串尽量短。
-
如何生成一个随机数?
import random
print(random.randint(0,9)) -
super的作用?
可以在子类中调用父类的方法或属性
-
双下划线和单下划线的区别?
__name是私有变量,只有内部可以访问,外部访问不了
_name是"可以被访问,但是是私有变量" -
@staticmethod和@classmethod的区别?
@staticmethod不需要表示自身对象的self和自身类的参数而@classmethod也不需要self参数,但第一个参数需要是表示自身类的参数
-
实现一个单例模式(加锁)。
-
栈和队列的区别?
队列先进先出
栈后进先出 -
以下代码输出是什么? 请给出答案并解释。
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类下添加代码完成该类的实现
class Sample:
def __enter__(self):
return self
def __exit__(self, type, value, trace):
print("type:", type)
print("value:", value)
print("trace:", trace)
print(sample)
def do_something(self):
bar = 1
return bar + 10
with Sample() as sample:
sample.do_something()
第二部分 可选题
-
如何获取列表中第二大的值?
-
简述Python内存管理机制。
-
简述Python的垃圾回收机制。
-
请用两个队列来实现一个栈。
-
请用Python实现一个链表。
-
请用Python实现链表的逆转。
-