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生成器的值已经取完了,所以这里为[]