Python面试题及答案Word格式.docx
《Python面试题及答案Word格式.docx》由会员分享,可在线阅读,更多相关《Python面试题及答案Word格式.docx(6页珍藏版)》请在冰点文库上搜索。
2,工厂函数,如list();
3,copy模块的copy()函数}
深拷贝:
创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数}
2、Python里面match()和search()的区别?
re模块中match(pattern,string[,flags]),检查string的开头是否与pattern匹配。
re模块中research(pattern,string[,flags]),在string搜索pattern的第一个匹配值。
>
print(re.match(‘super’,‘superstition’).span())
(0,5)
print(re.match(‘super’,‘insuperable’))
None
print(re.search(‘super’,‘superstition’).span())
print(re.search(‘super’,‘insuperable’).span())
(2,7)
3、有没有一个工具可以帮助查找python的bug和进行静态的代码分析?
PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug,会对代码的复杂度和格式提出警告
Pylint是另外一个工具可以进行codingstandard检查
4、简要描述Python的垃圾回收机制(garbagecollection)。
答案
这里能说的很多。
你应该提到下面几个主要的点:
Python在内存中存储了每个对象的引用计数(referencecount)。
如果计数值变成0,那么相应的对象就会小时,分配给该对象的内存就会释放出来用作他用。
偶尔也会出现引用循环(referencecycle)。
垃圾回收器会定时寻找这个循环,并将其回收。
举个例子,假设有两个对象o1和o2,而且符合o1.x==o2和o2.x==o1这两个条件。
如果o1和o2没有其他代码引用,那么它们就不应该继续存在。
但它们的引用计数都是1。
Python中使用了某些启发式算法(heuristics)来加速垃圾回收。
例如,越晚创建的对象更有可能被回收。
对象被创建之后,垃圾回收器会分配它们所属的代(generation)。
每个对象都会被分配一个代,而被分配更年轻代的对象是优先被处理的。
5、什么是lambda函数?
它有什么好处?
lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数
lambda函数:
首要用途是指点短小的回调函数
lambda[arguments]:
expression
a=lambdax,y:
x+y
a(3,11)
6、请写出一段Python代码实现删除一个list里面的重复元素
1,使用set函数,set(list)
2,使用字典函数,
a=[1,2,4,2,4,5,6,5,7,8,9,0]
b={}
b=b.fromkeys(a)
c=list(b.keys())
c
7、用Python匹配HTMLtag的时候,<
.*>
和<
.*?
有什么区别?
术语叫贪婪匹配(<
)和非贪婪匹配(<
)
例如:
test
<
:
8、如何在一个function里面设置一个全局的变量?
解决方法是在function的开始插入一个global声明:
deff()
globalx
9、编程用sort进行排序,然后从最后一个元素开始判断
a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
a.sort()
last=a[-1]
foriinrange(len(a)-2,-1,-1):
iflast==a[i]:
dela[i]
else:
last=a[i]
print(a)
10、下面的代码在Python2中的输出是什么?
解释你的答案
defdiv1(x,y):
print"
%s/%s=%s"
%(x,y,x/y)
defdiv2(x,y):
%s//%s=%s"
%(x,y,x//y)
div1(5,2)
div1(5.,2)
div2(5,2)
div2(5.,2.)
另外,在Python3中上面的代码的输出有何不同(假设代码中的print语句都转化成了Python3中的语法结构)?
在Python2中,代码的输出是:
5/2=2
5.0/2=2.5
5//2=2
5.0//2.0=2.0
默认情况下,如果两个操作数都是整数,Python2默认执行整数运算。
所以,5/2
结果是2,而5./2结果是2.5
注意你可以通过下面的import语句来覆盖Python2中的这一行为
from__future__importdivision
还要注意“双斜杠”(//)操作符将会一直执行整除,忽略操作数的类型。
这就是为什么5.0//2.0即使在Python2中结果也是2.0
但是在Python3并没有这一行为。
两个操作数都是整数时,也不执行整数运算。
在Python3中,输出如下:
5/2=2.5