^ _ ^
函数参数传递
1 | a = 1 |
1 | a = [] |
原因解释
- Python中包含6大数据类型,其中list、set、dict为可变对象,number、tuple、string为不可变对象
- Python函数传参时,传的是对象的地址
- 对于可变对象,会根据传来的对象地址直接在内存中修改对象
- 而对于不可变对象,当需要对其进行修改时,会分配一块新的内存区域(并复制原值到该区域),对这块新分配的内存区域进行操作
元类(metaclass)
解释:https://www.liaoxuefeng.com/wiki/1016959663602400/1017592449371072
静态方法、类方法、实例方法
1 | class A(object): |
类变量和实例变量
- 类变量被多个实例对象共享
- 实例变量为实例对象本身私有
普通例子
1 | class Test(object): |
补充例子
1 | class Person: |
- 本质上是函数传参的问题
- 这里p1.name=”bbb”是实例调用了类变量,p1.name一开始是指向的类变量name=”aaa”,但是在实例的作用域里把类变量的引用改变了,就变成了一个实例变量,self.name不再引用Person的类变量name了。
自省
自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型.简单一句就是运行时能够获得对象的类型。
例如:type(),dir(),getattr(),hasattr(),isinstance().
字典推导式
1 | d = {key: value for (key, value) in iterable} |
单下划线和双下划线
__foo__
:python内部名字_foo
:变量私有__foo
:解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名,它无法直接像公有成员一样随便访问,通过对象名._类名__xxx这样的方式可以访问.
迭代器和生成器
*args and **kwargs
AOP和装饰器
解释:https://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html
鸭子类型
1
重载
函数重载主要是为了解决两个问题:
- 可变参数类型:对于这种情况,Python中函数传参本来也不需要指明参数类型
- 可变参数个数:对于这种情况,Python中可使用缺省参数
因此,Python中不需要重载