测试面试Python高频考点

2341 篇文章 33 订阅
1785 篇文章 17 订阅

一、前言:周末愉快吖~

周六闺蜜来玩,中午我亲手做了韭菜炒鸡蛋、牛肉酱炒东北大拉皮、煮玉米、毛豆、烧卖,由于我不会做肉类的菜,外卖点了红烧排骨。还做了双皮奶、银耳红枣羹。

晚上带闺蜜出去吃了韩餐,被韩式凉面的酸甜口惊艳到了,炸鸡套餐、还有一种韩式汤也超鲜美。

闺蜜今天就返程回去了,买的整个西瓜、冰淇淋还没来得及和她一起吃呢

二、Python高频考点目录

Python基本数据结构有哪四种?区别是什么

Pyhton数据类型

Break和Continuous区别

Python return和yield的区别,以及return的作用

Python深拷贝和浅拷贝区别

range和xrange的区别

is和==的区别

什么是lambda函数

字符串拆分方法有哪些

单引号、双引号、三引号区别

python传参时需要注意什么

装饰器

函数或变量的作用域

解释型和编译型语言的区别

init和new的区别

常用的模块

python的list和numpy.array(数组)的区别

类中self的概念及其三种应用

python的几种变量,按照作用域划分

python的面向对象特征

三、Pyhton高频考点解答

3.1 Python基本数据结构及其区别,应用场景分别是什么,代码展现

3.1.1 Python基本数据结构有哪四种?区别是什么

list:有序可修改。通过索引进行查找、切片。使用方括号[ ]表示;

tuple:有序不可修改。可查询、切片操作。元组将多样的对象集合到一起,通过索引进行查找。用小括号( )表示;

set:集合,无序可修改,无重复,无索引,不能跟列表一样切片。自动去重。使用set([ ])表示;

dict:字典是一组key-value,通过key查找,无顺序,用{ }表示。

3.1.2 应用场景分别是什么

list:简单的数据集合,可用索引;

tuple:把一些数据当作整体去用,不能修改;

dict:使用key,value进行关联的数据;

set:数据无重复,只关心数据是否出现,不关心位置。

3.1.3 代码展现

mylist = [1,2,3,4,'oh']
mytuple = (1,2,'Hello',(4,5))
mydict = {'wang':1,'Hu':2,'Liu':3}
myset = set(['wang','Hu','Liu',4,'wa'])

3.2 Python数据类型

1、String(字符串)
2、Number(数字型)

int(整型)

float(浮点型)

complex(复数)

long(长整数)

3、 List(列表)
4、Tuple(元组)
5、 Dictionary(字典)
6、Set(集合)

3.3 Break和Continuous区别

break用于结束整个循环。

continuous不执行当前循环的statement,运行下一个循环。

3.4 Python return和yield的区别,以及print和return的作用

3.4.1 Python return和yield的区别

相同点:都是返回函数执行的结果。

不同点:return在返回结果后结束函数的运行,返回到调用处继续执行。而yield则是让函数变成一个生成器,生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值

3.4.2 yield生成器相比return一次返回所有结果的优势

反应更迅速

更节省空间

使用更灵活

3.4.3print和return作用

print的作用是输出数据到控制端,就是打印在你能看到的界面上。

return的作用之一是返回计算的值。

3.5 Python深拷贝和浅拷贝区别

浅拷贝:是在另一块地址中创建一个新的变量或容器,但是容器内的元素的地址均是源对象的元素的地址的拷贝。也就是说新的容器中指向了旧的元素(新瓶装旧酒)。

深拷贝:完全拷贝了一个副本,容器内部元素地址都不一样。

3.6 range和xrange的区别,Range函数用法

3.6.1 range和xrange的区别

python2中分range()和xrange() 其中range()是生成一个list,是一个列表生成式 而xrange()是一个生成器

python3中取消了xrange() 内置的range()实际就是python2里的xrange() 返回生成器

3.6.2 Range函数用法

返回一系列连续增加的整数

工作方式类似于分片

可生成一个列表对象

3.6.3 range代码

alist = range(0,101) #range生成0-100列表
print(alist)  #输出结果[0,1,2,....100]
blist = range(2,101,2)#设置步长为2
print(blist)#输出结果[2,4,6,.....100]

3.7 is和==的区别

is判断两个对象的内存地址是否相同 ==判断两个对象的值是否相同

3.8 什么是lambda函数

匿名函数形式 f=lambda x : x表达式

调用时可采用f(x)的形式 或者直接使用(可以用于return语句)

优点:没有名字,无需担心函数冲突

缺点:只能有一个表达式,没有return,返回值就是该表达式的结果

3.9 字符串拆分方法有哪些

方法一:String对象的Split方法,不允许有多个分隔符

方法二:函数re.split(),允许为分隔符指定多个正则模式

line = "I am super man!"
#String的split方法
print(line.split(" ")) #以空格拆分
输出['I','am','super','man!']
#re.split方法
import re 
print(re.split("[m]",line))
输出['I','a','','super','','an!']

3.10 单引号、双引号、三引号区别

单引号双引号没有区别,都可以用来表示字符串;

三引号,字符串内可直接换行,且可包含注释。

若要表示 Let's go 这个字符串
单引号:s1 = 'Let's go'
双引号:s2 = "Let's go"
三引号:s3 = 'I realy like "Python"!'

3.11python传参时需要注意什么

3.11.1 传入参数是否可以被修改

如果没有将外部变量传递到函数来(参数定义种包含该外部变量),则函数内部虽然可以使用,但是不能对该变量进行修改(会报错)——未传参的变量可使用但不可修改

将外部变量作为实参传递到函数中来的话,如果外部变量是不可变对象的话不可以修改该变量的原始值——相当于"传值"的方式来传递变量,可以通过改变引用指向的方式,在函数内部获取新的不可变对象,但是对函数外部没有影响(除非加了global)

python函数传入的是原变量引用的一个副本,这两个引用(副本及原引用)在内外均指向同一个内存区(具体存值的地方)。如果在函数内部改变了引用指向的话,只是副本引用指向了一个新的内存区,函数外面的引用仍然指向原内存堆区,不会改变原变量的值(不可变对象的操作、可变对象的赋值操作)。而如果在内部通过append、remove函数改变了堆区的值的话,外部的引用仍然会改变。

3.11.2 传入参数的顺序和类型

参数顺序:必选参数,默认参数,可变参数,命名关键字参数,关键字参数

可变参数必须在关键字参数之前

默认参数 必须指向不可变对象

可变参数 形式def func(可变参数) 传入参数的个数可以是0个或者多个,其实是传入一个list或者tuple,函数接收的是个tuple。如果有个list或者tuple想直接传入func的话,可以直接用func(list)实现(即把想要传入的可变参数封装成list/tuple传入)

关键字参数 形式def func(关键字参数) 允许传入0个或多个含参数名的参数,在函数内部组装成字典。传入的时候用参数名=参数值的形式。如果传入dict的话可以直接func(dict)

命名关键字参数 形式def func(,city,job) 限制某几种参数名的输入,传入的时候必须只有,后面的这几种参数名可以选择,传入用fun(city=xxx,job=xxx)的形式

3.11.3 补充:可变对象与不可变对象总结

可变对象:list、dict、set 可变对象是指对象的内存值可以改变

不可变对象:int、tuple、str、bool 不可变对象是指对象的内存值不可以被改变。改变变量时,其实质是变量指向新的地址,即变量引用新的对象

3.12 装饰器

装饰器可以在不改变函数代码和调用方式的情况下给函数添加新的功能。

本质上是一个嵌套函数,接收被装饰的函数(func)作为参数,并返回一个包装过的函数,以实现不影响函数的情况下添加新的功能。抽离出大量与函数主体功能无关的代码,增加一个函数的重用性。

应用场景:性能测试(统计程序运行时间)、插入日志、权限校验

3.13 函数或变量的作用域

正常的函数/变量是public的,可以被直接引用,如x123、 PI 等

xxx__变量/函数是特殊变量,虽可以被直接引用,但是有特殊的用途,比如说__initnew

_xxx 表示半私有的变量,只能在类或者子类内使用

__xxx表示私有的变量,只能在类内使用

这两种私有变量都是应当私有,而不是一定不能访问的

3.14 解释型和编译型语言的区别

3.14.1编译型语言

在程序执行前,需要把源代码编译成机器语言的文件,再执行时可以直接使用该编译结果,以后不需要再次编译。

优点:运行效率高

缺点:难以移植

3.14.2 解释型语言:

代码执行时才一行行动态翻译执行

优点:无需翻译器,方便程序移植;可以交互式运行

缺点:运行效率较低

3.15 init和new的区别

相同点:两者都是类中的private函数

不同点:

new是在实例创建之前被调用的,任务是创建实例然后返回该实例对象,是个静态方法,至少要有一个参数cls(代表当前类),必须有返回值(即该实例对象)

init是在实例创建完成后被调用的,设置对象属性的一些初始值,通常用在初始化一个类实例的时候,是一个实例方法,至少有一个参数self(代表当前的实例),无需返回值。

即init在new之后被调用,new的返回值(实例)传递给init的第一个参数,然后由init设置一些实例的参数。
此外,继承自object的类才有 new,如果定义子类的时候没有定义new,则会追溯到父类的new方法来构造该类实例,如果父类也未定义,则一直可以向上追溯到object的new方法

3.16 常用的模块

os 与操作系统交互

sys

random 生成伪随机数

time 可以读取时间戳或程序暂停

collections 提供常见的数据结构如双向队列deque、计数器Counter、默认字典defaultdict

3.17 python的list和numpy.array(数组)的区别

list可以存放不同类型的数据,比如int,str,bool,float,list,set等,但是numpy数组中存放的数据类型必须全部相同,必须全为int或全为float

list中每个元素的大小可以相同,也可以不同,因此不支持一次性读取一列,而numpy数组中每个元素大小相同,支持一次性读取一列。numpy对二维数组的操作更为便捷

list中数据类型保存的是数据存放的地址,即指针而非数据,比如一个有四个数据的列表a=[1,2,3,4]需要4个指针和4个数据,增加了存储空间,消耗CPU,但是a=np.array([1,2,3,4])只需要存放4个数据,节省内存,方便读取和计算

一个numpy的array是内存中的一个连续块,array中的元素都是同一类型的,所以一旦确定了一个array,它的内存就确定了,每个元素的内存大小都确定了。而list的每个元素是一个地址的引用,这个地址又指向了另一个元素,这些元素在内存里不一定是连续的,因此每当加入新元素,其实只是把这个元素的地址添加到list中

3.18 类中self的概念及其三种应用

self代表实例本身,具体来说是该实例的内存地址

3.18.1 self的三种应用

self为类中函数的第一个参数
在调用实例方法时,python解释器会自己把实例变量传递给函数中的self。如果类的实例方法的第一个参数不是代表实例的self,则调用实例方法时,该方法没有参数来接收自动传入的实例变量,程序会产生异常。

在类中,引用实例的属性 self.变量名
引用实例的属性目的是为实例绑定属性,写入或读取实例的属性

在类中,调用实例的方法 self.方法名()

3.19 python的几种变量,按照作用域划分

全局变量:在模块内、在所有函数之外、在class外

局部变量 :在函数内、在class的方法内(但未加self修饰)

静态变量/类属性 在class内,但是不在class的方法内的。
类的所有实例均可以访问到该类属性,用类名.变量名()的方式

实例变量/实例属性 在class的方法内,用self修饰的变量
实例属性的优先级高于类属性,所以若是同名,实例属性会覆盖类属性,有限输出实例属性

3.20 python的面向对象特性

1.封装
2.继承
3.多态

3.20.1 面向对象和面向过程语言的区别

面向对象是把问题抽象成一个个对象,给这些对象绑上属性和方法,即以功能而非步骤划分问题。优点:更易低耦合、易维护、易复用;缺点:因为需要实例化所以开销较大,性能比面向过程要低

面向过程是把问题拆分成一个个函数和数据,按照一定的顺序来执行这些方法。优点:性能较高;缺点:不易维护,不易复用

四、写在最后

Pyhton内容较多,另外进程、线程、协程面试遇到的频率也很高!!!由于写到现在我实在是太困了 ,打算把进程、线程、协程单独写一篇文章,同时也会写出相应的代码实现。小伙伴们下篇文章见啦

最后: 如果你平时有很多问题想要解决,你的测试职业规划也需要一点光亮,你也想跟着大家一起分享探讨,我给你推荐一个 「软件测试学习交流群:746506216」 你缺的知识这里有,你少的技能这里有,你要的大牛也在这里……


资源分享【这份资料必须领取~

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值