1.在Python中,list,tuple,dict,set有什么区别,主要应用在什么场景?
可变类型:list dict set
可变对象的内容是可以变化的,当对象的内容发生变化时,变量的对象引用是不会变化的。
不可变类型:tuple
不可变对象的本身不可变,但是变量的对象引用是可变的
2.简要介绍一下Python中的装饰器?列举几个常见的内置装饰器
装饰器是在不改变原函数的基础上为函数添加新功能的方法
@classmethod @staticmethod @property
3.静态方法,类方法,实例方法的区别
@property装饰器就是负责把一个方法变成属性调用,通常用在属性的get方法和set方法,通过设置@property可以实现实例成员变量的直接访问,又保留了参数的检查。另外通过设置get方法而不定义set方法可以实现成员变量的只读属性。
@classmethod 装饰器就是把类的函数直接使用了,不用实例化。通常情况下,类实例是解释器自动调用类的init()来构造的,但借助classmethod可以在解释器调用init前实现一些预处理逻辑,然后将预处理后的参数传入类的构造函数来创建类实例。
@staicmethod 装饰器就是把类的方法直接作为类的静态方法使用了,类的静态成员属于类本身,不属于类的实例,它无法访问实例的属性(数据成员或成员函数)。定义为staticmethod的函数被调用时,解释器不会自动为其隐式传入类或类实例的参数,它的实际参数列表与调用时显式传入的参数列表保持一致。
4.Python常见的内置函数有哪些
1、int(x) 2、long(x) 3、float(x) 4、complex(x) //复数 5、str(x) 6、list(x) 7、tuple(x) //元组 8、hex(x) 9、oct(x) 10、chr(x)//返回x对应的字符,如chr(65)返回‘A'
11、ord(x)//返回字符对应的ASC码数字编号,如ord('A')返回65
5.下面代码的输出是什么
6.生成100 内的偶数列表:
list = [x for x in range(0,100) if x %2 == 0]
7.将列表内元素,根据位数合并成字典
last = [1,2,4,5,16,32,64,128,256,512,1024,32769,65536,4294967296]
输出:{1:[1,2,4,8],2:[16,32,64],3:[128,256,512],4:[1024],5:[32768,65536],10:[4294967296]}
res = {}
for i in list:
if len(str(i)) not in res:
res[len(str(i))] = [i]
else:
res[len(str(i))].append(i)
8.合并两个有序列表
a = [3,4,6,10,11,18]
b = [1,5,7,12,13,19,21]
print(list(set(a+b))
9.请用尽量简洁的方法二维数组装换成1维数组:
例: 转换前 lst = [[1,2,3],[4,5,6],[7,8,9]], 转化后 lst = [1,2,3,4,5,6,7,8,9]
lst = [[1,2,3],[4,5,6],[7,8,9]]
a = lst[0]
b = lst[1]
c = lst[2]
d = a + b + c
10.简要介绍Python中的元类,在什么场景下会用到
在python中,类也是对象,这样的对象就是通过元类来创建的。元类就是"类的类"。
11.python常见的任务队列有哪些
Python标准库中包含了四种队列,
queue.Queue asyncio.Queue multiprocessing.Queue collections.deque
12.python 中高并发请求有哪些解决方案
一,Nginx要做负载均衡
二,程序层面做多线程,锁等机制
三,数据库层面处理 如 读写分离,用redis做页面缓存
四,服务器配置要尽量高
13.python的基本运行机制及特性
源码距离底层更远
运行时都需要生成字节码,交由虚拟机执行。
每次执行脚本,虚拟机总要多出加载和链接的流程。
14.python中的垃圾回收机制是什么
Python中的垃圾回收是以引用计数为主,标记清除和分代收集为辅。
15.python 测试工具有哪些
PyChecker是一个静态分析工具,它不仅能报告源代码中的错误,并且会报告错误类型和复杂度。
Pylint是检验模块是否达到代码标准的另一个工具。
16.将列表字符串转化成列表:
a = '192.168.1.1'
b = a.split('.')
print(b)
17.将列表['a','b','c'] 转化成 ‘a,b,c'
f = ['a','b','c']
d = ",".join(f)
print(d)
18.请手写一个单例
class A(object):
__instance = None
def __new__(cls, *args, **kwargs):
if cls.__instance is None:
cls.__instance = object.__new__(cls)
return cls.__instance
else:
return cls.__instance
19.****什么是lambda函数?它有什么好处?
答:lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数
lambda函数:首要用途是指点短小的回调函数
>> lambda [arguments]:expression
>>
>> a=lambdax,y:x+y
>>
>> a(3,11)
20.手写一个装饰器(斐波拉契函数)
def fun():
i = 1
num = 0
while i <= 10:
print(num)
num += i
yield num
i += 1
f = fun()
f.send(None)
#===========================
print("第一种方法")
next(f)
next(f)
#===========================
print("第二种方法")
f.__next__()
f.__next__()
#===========================
print("第三种方法")
f.send("hhh")
f.send("hhh")
21.解释一下什么是闭包?
在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包。
22.Python 中 is 和==的区别?
is 判断的是 a 对象是否就是 b 对象,是通过 id 来判断的。
==判断的是 a 对象的值是否和 b 对象的值相等,是通过 value 来判断的。
23 Python 的魔法方法 ?
魔法方法就是可以给你的类增加魔力的特殊方法,如果你的对象实现 (重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的。 它们经常是两个下划线包围来命名的(比如 init,lt),Python 的魔法方法是非常强大的,所以了解其使用方法也变得尤为重要!
init 构造器,当一个实例被创建的时候初始化的方法。但是它并 不是实例化调用的第一个方法。
new才是实例化对象调用的第一个方法,它只取下 cls 参数,并把 其他参数传给 init。 new很少使
用,但是也有它适合的场景,尤其 是当类继承自一个像元组或者字符串这样不经常改变的类型的时候。
call 允许一个类的实例像函数一样被调用 。
getitem 定义获取容器中指定元素的行为,相当于 self[key] 。
getattr 定义当用户试图访问一个不存在属性的时候的行为 。
setattr 定义当一个属性被设置的时候的行为 。
getattribute 定义当一个属性被访问的时候的行为 。