Python 基础面试题总结

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.下面代码的输出是什么

image

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 所调用,你可以定义自己想要的行为,而这一切都是自动发生的。 它们经常是两个下划线包围来命名的(比如 initlt),Python 的魔法方法是非常强大的,所以了解其使用方法也变得尤为重要!

init 构造器,当一个实例被创建的时候初始化的方法。但是它并 不是实例化调用的第一个方法。

new才是实例化对象调用的第一个方法,它只取下 cls 参数,并把 其他参数传给 initnew很少使

用,但是也有它适合的场景,尤其 是当类继承自一个像元组或者字符串这样不经常改变的类型的时候。

call 允许一个类的实例像函数一样被调用 。

getitem 定义获取容器中指定元素的行为,相当于 self[key] 。

getattr 定义当用户试图访问一个不存在属性的时候的行为 。

setattr 定义当一个属性被设置的时候的行为 。

getattribute 定义当一个属性被访问的时候的行为 。

你可能感兴趣的:(Python 基础面试题总结)