Python面试题大全

1. 写出常用的Python库:

答:requests:接口自动化

selenium: web的UI自动红花

appium: app的UI自动化

2. Python的数据类型:

答:整型-int

布尔型:bool

字符串:str

列表:list

元组:tuple

字典:dict

3. *arg 和*kwarg的作用:

答:*arg: 返回的字典

*kwarg:返回的是元组

4. 用lambda函数实现两个数相乘

答:lambda函数:是指点短小的回调函数。通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数

sum = lambda a,b: a*b

print(sum(2,6))

5.python里如何拷贝一个对象(赋值、深拷贝、浅拷贝)

答:赋值(=):就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。

浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(完全切片法,list2=list.copy(), copy模块的copy函数)

深拷贝:创建一个新的对象,并且递归的赋值它包含的对象(修改其中一个,不会影响另外一个)

import copy

list2=list1.deepcopy(list1)

6.介绍一下except的用法和作用

答:try...except...except...[else...][finally...]

执行try语句,如果引发异常,则执行过程会跳到except语句。对每个except分支顺序尝试执行,如果引发的异常与except的语句匹配,则执行相应的语句。如果所有的都不匹配,则异常会传递到一个调用本代码的最高层try语句中。

如果存在finally语句,最后总是执行。

7. 介绍一下python range()函数的用法?

答:列出一个数据,经常用在for ...in range() 循坏中。

8. Python中match()和search()的区别:

答:re模块中match(pattern, string[,flags],检查string的开头是否与pattern匹配

re模块中的search(pattern, string[,flags]),在string搜索pattern的第一个匹配值。

9.如何在一个function里面设置一个全局的变量?

答:解决方法是在function的开始插入要给global声明。

def f()

global x

10.Python里面如何实现tuple和list的转换?

直接使用tuple和list函数就可以了,type()可以判断对象的类型。

11. 用Python代码实现删除一个list里面的重复元素

a=[1,2,4,2,4,5,6,5,7,8,9,0]

b=[]

答:方法一:使用set()和list.sort()

b=list(set(a))

b.sort(key=a.index)

方法二:使用for循坏和list.append():

for i in a:

if i not in b:

b.append(i)

print(b)

方法三:利用列表推导式:

[b.append(i) for i in a if i not in b]

12. 利用切片操作,实现一个trim函数。注意不要调用str的strip()方法

方法一:递归调用函数本身:

def trim(a):

if a[:1]==' ':

a = trim(a[1:])

if a[-1:]==' ':

a = trim(a[:-1])

return a

b=trim('  life is not easy!  ')

print(b)

方法二:利用while循坏:

def trim(a):

while a[:1] ==' ':

a = a[1:]

while a[-1:] ==' ':

a = a[:-1]

return a

b = trim('  life is not easy!  ')

print(b)

13. 利用map函数,把用户输入的不规范的英文名字改为首字母大写。

map(function, iterable,..)根据提供的函数对指定序列做映射

def normallize (name):

return name[0].upper()+name[1:].lower()

def normallizelist (inputlist):

return map(normallize,inputlist)

a=['adam','LISTA','barT']

b=list(normallizelist(a))

print(b)

14. Super是干嘛用的,在Python2和Python3中有什么区别?为什么要是用super?

答:super用与继承父类的方法、属性。super是新式类中才有的,所以在Python2中要在类名的参数中写Object. Python3默认是新式类,直接可用。使用Super可以提高代码的复用性、可维护性。修改大代码是, 只需要修改一次。

class baseClass:

def test1(self, num):

print(num)

class sonClass(baseClass):

def test2(self):

super().test1(num)

son = sonClass()

son.test1(11)

15. 下面一段程序的输出是什么?

def add(n, i):

    return n+i

def test()

    for i in range(4)

    yield i  #返回生成器

g= test()

for n in [1,15,5]:

    g = (add(n,i) for i in g)

#拆解上面的for 循环

# 当n=1时,执行:g=(add(n,i) for i in g)

#当n=10时,执行:g=add(n,i) for i in g)

#当n=5时,执行:g=add(n,i) for i in g)

print(list(g)) #1. 从这里开始执行

g=test()==>g=0,1,2,3

#2.拆解上面的for 循环

# 当n=1时,执行:g=(add(n,i) for i in g) #3. g=0,1,2,3

#当n=10时,执行:g=add(n,i) for i in (add(n,i) for i in g)) 

#当n=5时,执行:g=add(n,i) for i in add(n,i) for i in (add(n,i) for i in g)) )

此时n=5, g=0,1,2,3, 执行第一次add之后i 变成(5,6,7,8),执行第二次之后变成了(10,11,12,13),只从第三次之后变成了(15,16,17,18)

总结:生成器的特点是惰性机制,你找它要,它才会给你值。for循环中,不管你循环多少次,生成器都是列表中的最后一个值。g在取值前,是一个内存地址,for循环一直改变着g的内存地址,最后是n=5的内存地址。

for循环一次,g中的值就加一次,每次加的都是n=5的内存地址的值。

for 循环第一次: 5+0,5+1,5+2,5+3

for循环第二次:5+5+0, 5+5+1,5+5+2,5+5+3

for循环第三次:5+5+5+0,5+5+5+1,5+5+5+2,5+5+5+3

16. 下面一段程序的输出是什么:

def demo():#生成器函数

    for iin range(4):

yield i

# 1 (0, 1, 2, 3)

g = demo()#得到一个生成器,demo中的代码没有被执行

g1 = (ifor iin g)# ()是生成器表达式,得到了一个生成器g1,生成器表达式的代码一句也没有被执行

g2 = (ifor iin g1)# 生成器表达式,得到了一个生成器g2,生成器的代码没有被执行

print(list(g1))# 结果是:[0, 1, 2, 3]//此时使用数据类型强制转换的方式从生成器g1中取值,所以g1对应的生成器表达式开始执行,全部执行完毕,g1生成器没有东西了

print(list(g2))# 结果是[]//此时取值,g2对应的表达式开始执行,表达式中遍历生成器,但是g1生成器的值已经取完了,所以这里为[]

你可能感兴趣的:(Python面试题大全)