python常见知识
1 __init__和__new__的区别
实际上,__init__函数并不是真正意义上的构造函数,__init__方法做的事情是在对象创建好之后初始化变量。真正创建实例的是__new__方法。
构造函数是指创建一个实例并初始化,所以应该是new加init才是构造函数,先new是给造房子准备原材料,然后init开始造房子
2 args和kwargs的区别
*args和kwargs主要用于函数定义。你可以将不定数量的参数传递给一个函数。这里的不定指的是预先并不知道函数使用者会传递多少个参数给你,所以在这个场景下使用这两个关键字。args是用来发送一个非键值对的可变数量的参数列表给一个函数.
kwargs允许你将不定长度的键值对,作为参数传递给一个函数。 如果你想要在一个函数里处理带名字的参数,你应该使用kwargs。
3 @classmethod和@staticmethod 的区别
@classmethod 装饰的类方法,@staticmethod 装饰的静态方法
A.m1是一个还没有绑定实例对象的方法,对于未绑定方法,调用 A.m1 时必须显示地传入一个实例对象进去,而 a.m1是已经绑定了实例的方法,python隐式地把对象传递给了self参数,所以不再手动传递参数,这是调用实例方法的过程。
m2是类方法,不管是 A.m2 还是 a.m2,都是已经自动绑定了类对象A的方法,对于后者,因为python可以通过实例对象a找到它所属的类是A,找到A之后自动绑定到 cls。
m3是类里面的一个静态方法,跟普通函数没什么区别,与类和实例都没有所谓的绑定关系,它只不过是碰巧存在类中的一个函数而已。不论是通过类还是实例都可以引用该方法。
具体的解释请参考(https://www.zhihu.com/question/26930016)
4 global和nonlocal的区别
global的作用对象是全局变量,nonlocal的作用对象是外层变量
5 python中的深拷贝和浅拷贝
浅拷贝就是对引用的拷贝,所谓深拷贝就是对对象的资源的拷贝。