1、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)
2.python中的字典,至少用两种方法取值与赋值
dict = {'name':'zhangsan','age':'18'}
# 字典中赋值的两种方法
dict['sex'] = '男'
dict = {'education':'本科'}
# dict['key'] = 'value' 这种给字典赋值的方式不会改变字典的ID;dict = {'key':'value'} 这种给字典赋值的方式会改变字典的ID;
# 从字典中取值的两种方法
print(dict['name'],dict.get('name'))
# 直接使用dict['key']时,如果对应的key不存在时,会导致报错keyerror,提示没有该key的值;
# 而是用dict.get('key') 则不会产生错误,解析器返回值如果存在就返回相应的value, 如果不存在就返回None.
3.python的多线程是在什么情况下使用,一般一个进程下是否支持多线程?
几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含多个顺序执行流,每个顺序执行流就是一个线程。
所有运行中的任务通常都会对应一个进程(Process)。当一个程序进入内存运行时,即变成一个进程。进程是处于运行过程中的程序,并且具有一定的独立功能。进程是系统进行资源分配调度的一个独立单位。
一个进程可以拥有多个线程,一个线程必须有一个父进程。线程可以拥有自己的堆栈、自己的程序计数器和自己的局部变量,但不拥有系统资源,它与父进程的其他线程共享该进程所拥有的全部资源。
线程在程序中是独立的,并发的执行流,而且线程的划分尺度小于进程,使得多线程程序的并发性高。进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高程序的运行效率。
4.is 与 == 区别
is判断的是a对象是否就是b对象,是通过id来判断的。
==判断的是a对象的值是否和b对象的值相等,是通过value来判断的。
5.sort和sorted的区别
sort是应用在list上的方法,sorted可以对所有可迭代的对象(包括字符串)进行排序操作。
对于一个无序列表a,调用a.sort(),对a排序后返回a,sort()函数修改待排序的列表内容。
而对于一个无序列表a,调用sorted(a),对a排序后返回一个新的列表,对a无影响。
6. Python中copy和deepcopy中的区别
deepcopy:深度复制,意思是完全复制然后变成一个新的对象,复制的对象和被复制的对象没有任何关系,彼此之间无论怎么改变都相互不影响。
copy:浅度复制,意思是并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当原对象被改变的时候,新的对象也就会发生变化。
但是浅度复制后,当原对象的父对象发生改变时,新对象不变;当原对象的子对象发生改变时,新对象也发生改变。
7. python中的装饰器?装饰器的作用?
装饰器是修饰其他函数的功能的函数,他们有助于让我们的代码更简短。
装饰器本质上是一个 Python函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象。
它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验
等场景,装饰器是解决这类问题的绝佳设计。有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码到装饰器中并继续重用。
概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
8. python是否支持多态?
多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承);多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。
9. python是否支持多重继承?
在Python中是支持多重继承的,也就是我们可以为一个类同时指定多个父类。可以在类名的()后边添加多个类,来实现多重继承。
多重继承,会使子类同时拥有多个父类,并且会获取到所有父类中的方法。
在没有特殊的情况,应该尽量避免使用多重继承,因为多重继承会让我们的代码过于复杂。如果多个父类中有同名的方法,则会先在第一个父类中寻找,然后找第二个,最后找第三个。前边父类的方法会覆盖后边父类的方法。
10. python的匿名函数?
对lambda函数,它其实是一个类似于def的函数,只不过lambda是一个不需要定义函数名的匿名函数。当我们在有些时候,需要做一些简单的数学计算时,如果定义一个def函数显得过于繁琐,但是不定义一个类似“函数”的对象,又显得不太方便,所以这里lambda函数就派上用场了。
11、如何结束一个进程?
(1)调用 terminate 方法。
(2)使用 subProcess 模块的 Popen 方法。使用简单,具体用法,这里不展开。
12. 说说接口测试的流程,介绍一下 request 有哪些内容。
(1)流程:获取接口文档,依据文档设计接口参数,获取响应,解析响应,校验结果,判断测试是否通过。
(2)request 内容:
① 封装了各种请求类型,get、post 等;
② 以关键字参数的方式封装各种请求参数,params、data、headers、token 等;
③ 封装了响应内容,status_code、json()、cookies、url 等;
④ session 会话对象,可以跨请求。
13. Python中常见的数据结构
字符串类型(String)
整数类型(Int)
小数类型(Float)
布尔类型(Bool)
列表类型(List)
元组类型(Tuple)
字典类型(Dict)
集合类型(Set)
'''详细描述:
1. 字符串类型(String): 通过两个或者三个单引号或者双引号定义
2. 整数类型(Int): 不带小数点的数字
3. 小数类型(Float): 带小数点的数字
4. 布尔类型(Bool): 只有两个值 True 或者 False
5. 列表类型(List): 使用[]定义的有序的数据集合
6. 元组类型(Tuple): 使用()定义的数据集合,元素不能够修改, 如果元素的值是可变类型该值里面的内容是
7. 可以被修改的。
8. 字典类型(Dict): 使用{}定义的键值对的数据集合, 键是对值进行描述,键是唯一的,值可以重复
9. 集合类型(Set): 使用{}定义的数据集合, 里面的数据是唯一
'''
# 应用场景
'''
列表类型(List):
1. 一般用来存储同一类型同一语义的数据集合。
2. 比如说人的姓名,年龄,性别
元组类型(Tuple):
1. 一般用来存储不可变的数据。
2. 在函数定义时可以通过 *args将变长的位置参数打包到元组中
3. 在调用函数时如果实际参数为元组, 可以通过 *元组 把元组拆包后作为实际参数传递给函数的形式参
数。
字典类型(Dict):
1. 一般用来存储一个事物的相关信息,该信息可以通过键来说明。 比如一个订单信息,一个员工信息,如果有多个订单信息或者员工信息, 再将多个信息放在列表中。
2. 在函数定义时可以通过 **kwargs将变长的关键字参数打包到字典中
3. 在调用函数时如果实际参数为字典, 可以通过 **字典 把字典中的键值对拆包后作为实际参数传递给函数的形式参数。
集合类型(Set):
1. 存储唯一性强的数据。
2. 如果说需要将一些数据去重,就可以将所有数据添加到集合中,最终集合里面保存的数据都是唯一的
'''
14. Python中列表(List)和元组(Tuple)的区别
列表类型(List):使用[]定义的有序的数据集合
元组类型(Tuple):使用()定义的数据集合,元素不能够修改, 如果元素的值是可变类型该值里面的内容是可以被修改的。
列表和元组之间可以相互转化:通过list(元组)将元组转换为列表,通过tuple(列表)将列表转换为元组,元组只有一个元素时后面的,是不可以省略的。例如:(10,) ("张三",)
# 列举列表常见的操作:
'''
添加:
1. 追加到尾部:list.append(obj)
2. 插入到指定索引位置:list.insert(index, obj)
3. 扩展:list.extend(seq)
4. 通过索引添加:list[len(list)] = obj 在列表的最大索引处添加一个新的元素
删除:
1. 删除元素:list.remove(obj)
2. 删除指定索引元素:value = list.pop([index=-1]) 3.
根据索引删除元素:del list[索引]
查询:
1. 查询元素:value = list[索引]
2. 长度:length = len(list)
3. 根据索引删除元素:del list[索引]
4. 遍历:for value in list 或者 while 的语法结构
切片:
1. 语法:list[开始:结束:步长]
2. 开始和结束都可以是双向索引: 正索引是从左向右 0 1 2 3, 负索引是从右向左 -1 -2 -3
3. 规则: 切取方向和步长方向一致才能够切出来
3.3. 应用场景:很多
'''
15. *args和**kwargs的区别?
def args_test(x, y, *args):
print(x, y, args)
args_test(1,2,3,4,5)
1 2 (3, 4, 5)
def kwargs_test(**kwargs):
print(kwargs)
kwargs_test(a=1, b=2, c=3)
{'a': 1, 'c': 3, 'b': 2}
注意点:参数arg、*args、**kwargs三个参数的位置必须是一定的。必须是(arg,*args,**kwargs)这个顺序,否则程序会报错。
16. python类中的实例方法、类方法、静态方法区别?
普通实例方法: 第一个参数必须要默认传实例对象self,它表示一个具体的实例本身;实例方法只能被实例对象调用;
staticmethod静态方法:那么就可以无视这个self,而将这个方法当成一个普通的函数使用,可以被类或类的实例对象调用;参数没有要求。
classmethod类方法:它的第一个参数不是self,是cls,它表示这个类本身;可以被类或类的实例对象调用;第一个参数必须要默认传类,一般习惯用cls。
17. 什么是ORM?为什么要用ORM?不用ORM会带来什么影响?
ORM框架可以将类和数据表进行对应,只需要通过类和对象就可以对数据表进行操作。
通过类和对象操作对应的数据表,类的静态属性名和数据表的字段名一一对应,不需要写 SQL 语句。
ORM另外一个作用,是根据设计的类生成数据库中的表。
参考:https://www.cnblogs.com/wanglle/p/12984684.html
https://blog.csdn.net/u011466469/article/details/108482272
https://blog.csdn.net/qq_34671951/article/details/88683456
About Me:小麦粒
● 本文作者:小麦粒,专注于python、数据分析、数据挖掘、机器学习相关技术,也注重技术的运用
● 作者博客地址:https://blog.csdn.net/u010986753
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● 个人微信号:pythonbao 联系我加微信群
●个人 QQ:87605025
● QQ交流群pythonbao :483766429
● 公众号:python宝 或 DB宝
● 提供OCP、OCM和高可用最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
欢迎赞赏哦!有您的支持,小麦粒一定会越来越好!