1、什么是lambda函数?它有什么好处?

lambda 函数也叫匿名函数,是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数。lambda 函数不能包含命令,它们所包含的表达式不能超过一个。

2、Python中pass语句的作用是什么?

pass语句什么也不做,一般作为占位符或者创建占位程序,pass语句不会执行任何操作

3、Python的基本数据类型

数值型(包括整型、浮点型,复数)、布尔型、字符型、元组、列表、集合、字典
不可变数据(数据内元素无法改变):数值型、字符串、元组
可变数据类型(数据内元素可以改变):列表、集合、字典

4、Python是静态还是动态类型?是强类型还是弱类型?

python是动态的、强类型语言
动态/静态:在编译期就确定变量类型的是静态类型语言,在运行期才确定变量类型的则是动态类型语言。
强/弱类型:编译器有很少(合理)隐式类型转化的是强类型语言,有较多(过分)隐式类型转化的是弱类型语言。

5、python如何传递函数

因为python中一切皆对象,所以他说根据对象的引用来传递,根据对象是可变数据还是不可变数据,是可变类型的数据,直接修改,不可变类型则是创建新的对象,让形参指向新的对象

6、什么是对象?

对象简单的来说,就是再内存中开辟的一块数来存储数据的空间,对象是类的实例

7、python中的*,**

这可以用在对数据进行解包中,*指的是将元素取出后打包成元组,如 a, *b=[1,2,3]则a=1,b=(2,3)
**指的是将取出的元素打包成为字典类型
还可以用来定义动态参数 如:*args,**kwargs

8、python的全局解释器锁(GIL)

GIL是解释器中一种线程同步的方式,对于每一个解释器进程都具有一个 GIL,它的直接作用是限制单个解释器进程中多线程的并行执行,使得即使在多核处理器上对于单个解释器进程来说,在同一时刻运行的线程仅限一个。

9、python多线程

因为全局解释器锁(GIL)的存在,使的python中无法进行并行计算,即使是多核处理器,也只能进行单线程运算,但在python中可以使用threading.Thread ()方法,实现在很短时间内进行多个线程运算,所以python是伪多线程。

10、为什么有GIL存在还要关注进程安全?

GIL 保证的是每一条字节码在执行过程中的独占性,GIL 具有释放机制,所以 GIL
并不会保证字节码在执行过程中线程不会进行切换,即在多个字节码之间,线程具有切换的可能性。

11、什么是闭包?

闭包就是外部函数中定义了一个内部函数,内部函数可以引用外部函数的变量,外部函数的返回值是内部函数 。
形成闭包的条件:必须有一个内部函数;内嵌函数必须引用外部函数的变量;外部函数返回值必须是内嵌函数

12、什么是装饰器?

指的是定义一个函数,该函数可以在特定条件下为某些函数在不改动函数体的情况下添加一些新的功能。 使用@来调用装饰器

13、python中的内存管理

Python中的内存管理中由python私有堆空间管理,所以python对象和数据结构都在私有堆中。程序员无权访问此私有堆。由python解释器负责处理这个问题。

14、python中命名空间

是一个命名系统,用来确保名称是唯一的,避免命名冲突

15、什么是python模块?python中有哪些常用内置模块

Python模块是包含python代码的.py文件。此代码可以是函数或变量。
常用模块:sys、math、random、datatime、json等

16、对象的三个属性

Id(地址)、type(类型)、value(值)

17、全局变量、局部变量

全局变量:在函数外或全局空间中声明的变量,这些变量可以被程序中的任何函数访问。
局部变量:在函数内声明的任何变量,此变量存放局部空间中。

18、python类中属性和方法查找的流程

当我们调用一个对象的属性时,解析器会先在当前对象中寻找是否包含该属性, 若是有,则直接返回当前对象的属性值
如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象属性,没有则报错

19、python类中的self是什么?

self是python类的实例化对象

20、copy(浅拷贝)和deepcopy(深拷贝)

浅拷贝是将一个对象的引用拷贝到另一个对象上,如果在拷贝中改动,会影响到源对象
深拷贝是将一个对象拷贝到另一个对象中,如果对一个拷贝对象作出改变时,不会影响源对象

21、列表中的+和*

在列表中,*表示将列表元素重复多次
在列表中,+表示将一个列表加到另一个列表中

22、列表和数组的区别

列表中的元素的数据类型可以不一样,
数组中的数据类型必须相同
列表不可以进行四则运算,数组可以
相对于数组,列表会使用更多的存储空间

23、面向对象的三大特性

封装:隐藏对象中一些不希望被外部访问的属性或方法(确保了数据的安全性)
设置隐藏属性:
(1)使用(__)双下滑线开头来设置
使用此方法实际上是python自动将属性名改成了_类__属性名
( 2)一般是将私有属性以_开头
继承:通过继承我们可以使一个类获取到其他类的属性或方法
所有类默认继承Object
issubclas(a, b) 用来检查a类是不是b的子类
isinstance(a, b) 检查a是不是b类的实例对象,如果是b的父类也会返回true
继承父类的属性:Super()可以用来动态获取当前类的父类
多态:简单来说就是一个类的多种状态,例如鸭子类型(如果一个东西走路像鸭子、叫声像鸭子,那么它就是鸭子),只要改类中包含某个特征(属性/方法)那就可以执行某些动作。

24、类中的getter和setter方法

用来访问和修改类中的私有属性

24、property装饰器

可以将一个getter方法,转化为对象的属性,方便调用,但方法名必须和属性名相同
Setter方法的装饰器调用:@属性名.setter 此时必须设置getter方法

26、实例属性和类属性

类属性:直接在类中定义的属性
类属性可以通过类或类的实例访问
类属性只能通过类对象来修改,无法通过实例对象修改
实例属性:通过实例对象添加的属性属于实例属性
实例属性只能通过实例对象来访问和修改,类对象无法访问修改
init(self):中的self设置的参数都是实例属性。

27、实例方法和类方法
在类中定义,以self为第一个参数的方法都是实例方法
在实例方法调用时,python会将调用对象作为self传入
实例方法可以通过实例和类去调用
	当通过实例调用时,会自动将当前对象作为self传入
	当通过类调用时,不会自动传递self,必须要手动传递self
类方法:在类内部使用@classmethod来修饰的方法
	类方法的第一个参数使cls,也会被自动传递,cls就是当前类对象
28、静态方法

在类中使用@staticmethod来修饰的方法 静态方法不需要指定任何的默认参数,静态方法可以通过类和实例去调用
静态方法,基本上是一个和当前类无关的方法,它只是一个保存在类中的函数 静态方法一般都是工具方法,和当前类关系不大

29、垃圾回收

Python中有自动的垃圾回收机制,他会将这些没有引用的对象进行自动删除,运行结束后将所有内容回收。