【测试⼯程师】Python⾯试题
----------------------8⽉4⽇----------------------------------------------------------------
1. python中a==b和a is b的却别
a==b是⽐较运算符,变量a b的值相等则返回Ture否则返回False
a is
b 是同⼀运算符,a,b的数值相等未必返回Ture,Python为了优化效率内置了⼩整数对象池和简单字符串对象池,⼩整数对象池包括[-5, 256]这之中的数相同时,指的是⼀个对象。简单字符串也如此。
2.打印5次“hello world”字符串
print(“world”*5)
3.dic中取出对应的值java入门编程哪个品牌好
①dic["key"]
②dic.values()。(取出所有的键,dic.keys())
jurisdiction③for k,v in dic.items(): print(k)
④ ("key","没有到该键“)
⑤dic.pop("key","没有到该键")获取该键对应的值,并且删除字典中的这⼀键值对,如果该键不存在,则返回第⼆个参数(默认值)
-----------------------------------------------------------------------------------------------
**python中的那些容器可以存放不同数据结构?
list、tuple、set、dict
**如何创建Python中的不同数据类型?
lis=[]
tuple=()
set={}
dict={}
bul=None
**__init__.py功能?
①标识该⽬录为python模块包
②当⽤ import 导⼊该⽬录时,会执⾏ __init__.py ⾥⾯的代码,该⽂件就是⼀个正常的python代码⽂件。因此可以将初始化代码放⼊该⽂件中
**⽤过Python哪些装饰器
装饰器:为原函数扩展信⼯鞥你,⽤新功能待提就功能
作⽤,再不改变原油代码基础上,实现功能上的扩展
操作:讲⼀个函数当做变量存⼊到新的函数中,⽤到闭包函数(内层函数引⽤外层函数值,外层函数返回内层函数)的⽅法
闭包函数,将原函数替换为新的函数
@符号的作⽤
1.把@符号下⾯的函数当做参数传递给装饰器
2.可以把函数进⾏返回,让新函数代替旧函数,以实现功能上的扩展
def kuozhan2(func):
def newfunc():
print('扩展脚本1')
func()
print('扩展脚本2')
return newfunc
@kuozhan2
def fun():
print('旧⽅法')
装饰器嵌套
存储过程执行语句@kuozhan3
@kuozhan4
def func():
print('旧⽅法')
⽤装饰器修饰带有参数的函数
扩展新的功能要和原函数的功能在参数和返回值上保持⼀致
数据库视图的概念和作用def kuozhan5(func):
def newfunc(who,where):
XXX
kuozhan5()
return newfunc
@kuozhan5
def func(who, where):
print("{who}在{where}买车",format(who,where))
func('张三',‘4s点’)
**Python中哪些数据类型的是可变参数,哪些是不可变参数
int、String、touple---不可变
dic、list---可变
1. mro是什么
method resolution Order,⽅法解析顺序,⽅法调⽤时需要对当前类和基类进⾏搜索以确定⽅法艘在的位置,⽽搜索的顺序就是⽅法解析顺序
2. 什么是c3算法
为了解决原来基于深度优先算法不满⾜本地优先级和单调性的问题,
本地优先级:声明时⽗类的顺序,C(A,B)
3. ⾯向对象中带双下划线的特殊⽅法
__setattr__:添加/修改属性时会触发
__delattr__:删除属性时触发
4. 双下划线和单下划线的区别
单:保护变量。只有类对象和⼦类对象能访问到这些变量
双:私有成员,只有类对象能访问,⼦类对象不能访问
5.上下⽂context你知道吗?(with的⽤法,如果类需要⽀持with语句,应该如何书写?)
基本格式 with context_expression [as target(s)]: with - body 这⾥context_expression要返回⼀个上下⽂管理器对象,该对象并不赋值给as中的target(s),如果制定了as⼦句的话,会将上下⽂管理器的__enter__()和__exit__()两个⽅法context_manager.__enter__():进⼊上下⽂管理器的运⾏时上下⽂,
在语句执⾏前调⽤,。with语句将该⽅法返回值赋值给as⼦句中的target,
6. 实现⼀个Singleton单例类,要求遵循基本语⾔编程规范(⽤尽量多的⽅式)
通过函数返回⼀个对象、装饰器实现、__new__
二阶矩和方差的关系希望某⼀个对象仅在程序中出现⼀次,之后所有调⽤使⽤同⼀个对象
__new__
class RedisClient:
_instance = None
@classmethod
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = redis.StrictRedis(**REDIS_CONFIG, bd=0)
return cls._instance
if __name__ == '__main__':
r=RedisClient()
单例模式的优点核应⽤?
1.节省空间,全局内只有⼀个实例
2.数据库配置、数据库连接池
3.⽹站计数器
7. json序列化时,默认遇到中⽂会换成unicode,想保留中⽂怎么办?
json.dump({"ddf":"你好“”}, ensure_ascii = Flase)
8. ⽤python匹配HTMLtag的时候,<.*>和<.*?>有什么区别?
<.*>贪婪匹配,匹配所有
<.*?>⾮贪婪匹配,匹配到第⼀个就停了
9.如何判断⼀个邮箱合法
import re
if re.match(r'^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$', email):
print('right')
else:
print('wrong')
10. ⽤列表⽣成式写⼀个0-100的列表
a = [i for i in range(100)]
11, ⽤列表⽣成式写⼀个取0-100的技术
b= [i for i in range(100) if i%2 != 0]
c = [i for i in range(1,100,2)]
range可以设置步长
切⽚:字符串也有下标,【开始的下标:长度】
s = “hello world”
a = s[0:5]
切⽚加步长,每隔2个切⼀个[0:100:2]
d = [i for i in range(100)[::2]]
12.将类表中重复的元素过滤
lis = [1,2,2,3,3,5]
list(set(lis))
counter = {}定义⼀个计数器,⽤来保存元素在列表中出现的次数
for i in lis:
ifpython基础代码实例
13.列表和元组的去表
li = []
tu = (1,2,3,4)#元组的元素不可变
14. 迭代器与⽣产器的区别
x = [1,2,3,4,5]
y = range(1,6)
list保存完整的值
generator不保存值
是什么:可以边迭代边计算,占⽤内存⼩
为什么要⽤:list中值都会存在内存中,当有⼤量数据时,且仅适⽤list中部分值,那么不适⽤的值就浪费了,⽣成器解决了这个问题
创建⽣成器:①将[1,2,3]改为(1,2,3)②当函数中使⽤了yield关键字,那么这个函数是⼀个generator,调⽤函数就是创建了⼀个⽣成器对象。
原理:⽣成器有⼀个next()⽅法,可以重复调⽤next()对象向⽣成器中取值,并且yield在return后会记住当前位置,并下次调⽤时从yield下
⼀条语句开始执⾏
15.进程与线程的区别
线程是程序运⾏的最⼩单位
进程是操作系统管理的最⼩单元
进程可能包括好⼏个线程
16.说⼀下python中的多线程特点
⼀般编程语⾔中多线程可以利⽤CPU的多核⼼python的多线程有GLI全局锁,不能真正意义上多核⼼
10.python怎么利⽤多核⼼
可以利⽤多进程实现
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论