一、前言
本专栏将会对近年高频测试相关面试题做详细解答,结合自己多年工作经验,以及同行大佬指导总结出来的。旨在帮助测试、python方面的同学,顺利通过面试,拿到自己满意的offer。
让我们一起卷起来吧!
二、 试题详解
1)如何遍历一个列表同时获得它的索引和元素值:
使用内置的高阶函数enumerate:
a = ['a', 'b', 'c']
for i, value in enumerate(a):
print(i, value)
输出结果
0 a
1 b
2 c
2)什么是上下文管理器
任何实现了 enter() 和 exit()方法的对象都可称之为上下文管理器,上下文管理器对象可以使用 with 关键字。如常见的打开文件操作代码:
with open('test.txt', encoding='utf-8') as f:
print(f.readlines())
它与下面的代码意义是一样的:
f = open('test.txt', encoding='utf-8')
print(f.readlines())
f.close()
使用with等于自动帮我们执行了f.close(),open(打开文件)的代码如下所示:
class Open(object):
def __init__(self, filename, **kwargs):
self.f = open(filename, **kwargs)
def __enter__(self): #调用方法时首先执行
return self.f
def __exit__(self, exc_type, exc_val, exc_tb): #执行完成后要做的操作
self.f.close()
with Open('test.txt', encoding='utf-8') as f:
print(f.readlines())
上下文管理器也等同于try、expect、finally模式,如下所示:
f = open('1.txt', 'wb')
try:
f.readlines()
except:
pass
finally: # 不管是否抛出异常,始终最后都会执行这一步
f.close()
3)fun(*args,** kwargs)中的 *args,**kwargs是什么意思
*args
*args和**kwargs主要用于函数定义。你可以将不定数量的参数传递给一个函数。这里的不定的意思是:预先并不知道函数使用者会传递多少个参数给你所以在这个场景下使用这两个关键字。
*args是用来发送一个非键值对的可变数量的参数列表给一个函数这里有个例子帮你理解这个概念:
def test(*args):
print('传入的参数:',args)
for parm in args:
print(parm)
test('a', 'b', 'c')
输出结果
传入的参数: ('a', 'b', 'c')
a
b
c
可以看到可以传递多个参数给*args
**kwargs
**kwargs允许你将不定长度的键值对作为参数传递给一个函数。如果你想要在一个函数里处理带名字的参数你应该使用**kwargs。
这里有个例子帮你理解这个概念kwargs:允许你将不定长度的键值对作为参数传递给一个函数,如果你想要在一个函数里处理带名字的参数你应该使用**kwargs,这里有个例子帮你理解这个概念:
def test(**kwargs):
print('传入的参数:', kwargs)
for parm in kwargs:
print(parm)
test(a=1, b=2, d=3)
输出结果
传入的参数: {'a': 1, 'b': 2, 'd': 3}
a
b
d
4)Python断言方法说明及举例
assert为python的断言方法,当断言判断成功时,程序继续执行,判断不成功时则抛出AssertionError异常:
a = 3
assert a > 2
print('断言成功!程序继续执行')
assert a > 3 # 断言失败,不会执行后面的代码
print('断言失败!但我不会被执行')
输出结果
AssertionError
5)Python的filter函数说明及举例
filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回True或 False,最后将返回True的元素放到新列表。
举例:有一个元素全为数字的列表,过滤出其中的大于10的元素并返回新列表
1. 普通函数实现
def fn(v):
return v > 10
a = [1, 18, 10, 12, 3, 6, 9, 33, 26, 9]
b = filter(fn, a)
print(list(b))
2. 匿名函数实现
a = [1, 18, 10, 12, 3, 6, 9, 33, 26, 9]
b = filter(lambda x: x > 10, a)
print(list(b))
输出结果
[18, 12, 33, 26]
6)Python的列表推导式
列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表。
如果我们要走一个列表中找出大于10的元素放在一个新的列表中,传统的实现代码是这样的:
old_list = [1, 18, 10, 12, 5, 6, 9, 33, 26, 7]
new_list = []
for v in old_list:
if v > 10:
new_list.append(v)
print('元素都大于10的列表:', new_list)
转换为列表推导式的实现如下:
old_list = [1, 18, 10, 12, 5, 6, 9, 33, 26, 7]
new_list = [v for v in old_list if v > 10]
print('元素都大于10的列表:', new_list)
输出结果
元素都大于10的列表: [18, 12, 33, 26]
7)如何统计一个列表元素重复的次数
1、可以直接使用内置库collections中的Counter方法:
str_v = '132132143256753'
res = Counter(str_v)
print(res)
输出结果
Counter({'3': 4, '1': 3, '2': 3, '5': 2, '4': 1, '6': 1, '7': 1})
2、手写代码:
str_v = '132132143256753'
res = {}
for v in str_v:
if v not in res:
res[v] = 0
res[v] += 1
print(res)
8)python合并列表有哪些方法
1、使用"+"号:
a = [1, 2, 3]
b = [1, 3]
c = a + b
print(c)
2、使用extend方法:
a = [1, 2, 3]
b = [1, 3]
a.extend(b)
print(a)
使用"+"和extend的区别在于:"+"号会生成一个新的列表,而extend是直接在原列表中进行操作。
9)x=(1,),x=(1),x=("1")有什么区别
1、x=(1,)会生成一个元组:
x = (1,)
print(x, type(x))
输出结果
(1,) <class 'tuple'>
2、x=(1)会生成一个整型数字:
x = (1)
print(x, type(x))
输出结果
1 <class 'int'>
3、x=("1")会生成一个字符串数字:
x = ("1")
print(x, type(x))
输出结果
1 <class 'str'>
10)Python如何反转一个字符串
方法一:切片
str_v = 'abcdEf'
print(str_v[::-1])
输出结果
fEdcba
方法二:反转列表法
str_v = 'abcdEf'
str_v = list(str_v)
str_v.reverse()
str_v = ''.join(str_v)
print(str_v)
第二种方法太复杂了,优先使用第一种。
三、总结
本章节的面试题比较常见,在面试中被问的频率还是非常高的,大家需要重点注意一下!
有疑问的话欢迎call我,在线解答。