崩溃!学了三年Python,这几道面试题还是答不好

每天进步一点点,关注我们哦,每天分享测试技术文章

本文章出自【码同学软件测试】

码同学公众号:自动化软件测试,领取资料可加:magetest

码同学抖音号:小码哥聊软件测试

Python语言不仅是开发界的宠儿,也是测试界不可或缺的一个脚本语言,因为其语法简单,书写方便而受到广大测试人员的喜欢。不仅可以做自动化测试,而且还可以进行测试平台的开发,利用其flask和django的框架。

 

既然python也是测试界不可获取的一部分了,当然面试也多少会问到,那么就分享2道比较经典的面试题。

 

01迭代器,生成器,装饰器

回答——

生成器:在Python中, 一边循环一边计算的机制, 称为生成器:generator 创建生成器: G = ( x*2 for x in range(5))可以通过 next(生成器) 函数获得生成器的下一个返回值 没有更多的元素时, 抛出 StopIteration 的异常生成器也可以使用for循环,因为生成器也是可迭代对象

 

迭代器:拥有__iter__方法和__next__方法的对象就是迭代器。接下来科普几个概念,第一迭代:迭代是访问集合元素的一种方式,可以将某个数据集内的数据一个挨着一个取出来,就叫做迭代,第二个是可迭代协议,协议就是互相规定好的,可迭代协议的定义非常简单,就是内部实现了__iter__方法和__next__方法。

 

装饰器:装饰器的本质就是闭包函数,那么什么是闭包呢,在 python 中创建一个闭包一般有 3 个要求:

  • 闭包函数必须有内嵌函数。

  • 内嵌函数必须要引用外层函数的变量。

  • 闭包函数返回内嵌函数的地址(函数名称)

 

如下图所以:

 

 

装饰器的作用:在不修改原函数及其调用方式的情况下对原函数功能进行扩展

 

02简述python的垃圾回收机制

回答——

以对象引用计数为主标记清除和分带技术为辅的那么一种方式,如果内容中对象的引用计数为0,那么就代表对象被销毁,这个对象所占用的内存空间就会被释放出来。

 

03使用你熟悉的语言去写一个冒泡排序

 

回答——

首先科普下冒泡排序,冒泡排序就是由于相邻元素相互比较大小的交换,间接导致相对于偏大的元素不断往后移动,最后形成升序的数列,是一种交换排序

 

核心原则就是:判断前一个元素和后一个元素的大小,如果前一个元素大于后一个元素,那么就会前后交换位置。

转换成代码即时

 

 

免费领取码同学软件测试课程笔记+超多学习资料+完整视频+面试题,可加微信:magetest

如果li序列是li=[30,12,56,9,8,68,2]里面有7个数字,那么确定一个数的位置至少需要6次的比较。

 

 

 

最后的运行结果如下,可以确定最大一个数的位置。

 

 

这个li需要确认6个数字的位置,因为一共7个,后面6个数的位置都确定了,最前面的一个数的位置自然就确定了。所以需要循环以上操作6次,代码完善如下:

 

 

经过上面运行结果的考察,我们会发现,每次的后一次排序都是在前一次的排序基础上面进行的排序,也就是第一次排序需要比较6次大小,第二次排序已经确定好68的位置,所以只需要比较5次就可以,第三次排序在之前已经确定好了56和68的位置,那么只需要比较4次就可以了,依次类推最后一次只需要比较1次即可。

 

那么可以给原来的代码做如下优化:

 

 

结果跟之前一样,依然可以确定最后的排序结果,然后用函数进行最终的优化结果如下:

 

 

Python的面试题就分享到这了,大家有什么问题可以评论区留言。

免费领取码同学软件测试课程笔记+超多学习资料+学习完整视频 ☞ 可加:magetest/关注码同学公众号:自动化软件测试

本文著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

posted @ 2022-09-19 09:15  码同学软件测试  阅读(34)  评论(0编辑  收藏  举报