2018年11月测试
时间(30分钟)
1、python中lambda的作用是什么?(https://www.cnblogs.com/jsplyy/p/5634654.html)
lambda只是一个表达式,函数体比def简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。
附(该链接有优缺点的介绍):https://m.pythontab.com/article/1371
2、python中search()和match()的区别?(https://www.cnblogs.com/aaronthon/p/9435967.html、https://www.cnblogs.com/sunshore/p/3907290.html)
match()函数是在string的开始位置匹配,如果不匹配,则返回None
search()会扫描整个string查找匹配;也就是说match()只有在0位置匹配成功的话才有返回,
例如:
print(re.match(‘super’, ‘superstition’).span()) 会返回(0, 5)
而print(re.match(‘super’, ‘insuperable’)) 则返回None
search()会扫描整个字符串并返回第一个成功的匹配
例如:print(re.search(‘super’, ‘superstition’).span())返回(0, 5)
print(re.search(‘super’, ‘insuperable’).span())返回(2, 7)
3、性能遇到瓶颈,怎么分析(除此之外还有两道性能题目,未能记住)
4、写出jmeter中常用元件、组件及其作用?(http://blog.chinaunix.net/uid-26884465-id-3418212.html)
5、http接口测试与webservice接口测试的区别?(https://www.cnblogs.com/phoebes/p/8029464.html、https://zhidao.baidu.com/question/2013121707705008788.html)
6、以下的代码的输出结果是什么? 说出你的答案并解释。(答案https://m.pythontab.com/article/978)
class parents(object): x=1 class child1(parents): pass class child2(parents): pass print(parents.x,child1.x,child2.x) child1.x=2 print(parents.x,child1.x,child2.x) child2.x=3 print(parents.x,child1.x,child2.x)
答案:
以上代码的输出是:
1 1 1
1 2 1
3 2 3
使你困惑或是惊奇的是关于最后一行的输出是 3 2 3 而不是 3 2 1。为什么改变了 Parent.x 的值还会改变 Child2.x 的值,但是同时 Child1.x 值却没有改变?
这个答案的关键是,在 Python 中,类变量在内部是作为字典处理的。如果一个变量的名字没有在当前类的字典中发现,将搜索祖先类(比如父类)直到被引用的变量名被找到(如果这个被引用的变量名既没有在自己所在的类又没有在祖先类中找到,会引发一个 AttributeError 异常 )。
因此,在父类中设置 x = 1 会使得类变量 X 在引用该类和其任何子类中的值为 1。这就是因为第一个 print 语句的输出是 1 1 1。
随后,如果任何它的子类重写了该值(例如,我们执行语句 Child1.x = 2),然后,该值仅仅在子类中被改变。这就是为什么第二个 print 语句的输出是 1 2 1。
最后,如果该值在父类中被改变(例如,我们执行语句 Parent.x = 3),这个改变会影响到任何未重写该值的子类当中的值(在这个示例中被影响的子类是 Child2)。这就是为什么第三个 print 输出是 3 2 3。
问题的关键点请看上述红色文字!这个问题很基础,但是相信有不少同学也会在这里犯错误,所以平时基本功要做好。
7、以下的代码的输出结果是什么? 说出你的答案并解释。(答案:https://blog.csdn.net/u011860731/article/details/46955307)
def extendlist(val,list=[]): list.append(val) return list list1 = extendlist(10) list2 = extendlist(123,[]) list3 = extendlist('a') print("list1 = %s"%list1) print("list2 = %s"%list2) print("list2 = %s"%list3)
答案:
输出结果为:
list1 = [10, 'a'] list2 = [123] list2 = [10, 'a']
很多人会错误地预计list1
等于[10]
,list3
等于['a']
,认为extendList
函数的list
参数在每一次函数被调用时都会被设置为默认值[]
但是,真实的情况是,默认的list
只在函数定义的时候被创建一次。之后不指定list
参数地调用extendList
函数时,使用的都是同一个list
。这是因为带默认参数的表达式是在函数定义的时候被计算的,而不是在函数调用时。
question:既然python的默认参数都是在定义时计算的,下次调用时会调用统一个list,那最后一个怎么不得24呢???
所以,list1
和list3
都是在操作同一个默认list
,而list2
是在操作它自己创建的一个独立的list
(将自己的空list
作为参数传递过去)
extendlist
的定义可以这样定义来达到我们预期的效果:
8、用程序写:一共有10个台阶,每次只能上1个或者2个台阶,一共有多少种走法。(https://blog.csdn.net/kikitious_du/article/details/79057803)