关于python,一些整理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于python,一些整理相关的知识,希望对你有一定的参考价值。
参数传递
1 a = 1 2 def fun(a): 3 a = 2 4 fun(a) 5 print a 6 7 # 输出: 1
1 a = [] 2 def fun(a): 3 a.append(1) 4 fun(a) 5 print a 6 7 # 输出 [1]
第一个,执行完 a = 1, 在当前命名空间里有一个标识符a 指向了一个整形变量 1 , 传入fun之后,fun的局部命名空间里有一个标识符a 指向了传进来的 1, 此时 将局部空间的a = 2, 那么他将指向整数2, 而函数体外面的不受影响
第二个,fun 里的标识符a 和外面的标识符a 都指向了同一个内存中的列表,所以函数体外的a也收到了影响
元类
类就是一组用来描述如何生成一个对象的代码段
元类就是一种类,他的作用是来产生一个类,就好比Int这个类用来产生一个整数
一个比较好的文章: http://python.jobbole.com/21351/
类属性和实例属性
看一个比较坑的例子:
1 class A(): 2 a = 1 #类属性 3 a = A() 4 b = A() 5 print(A.a, a.a, b.a) 6 #输出 1 ,1 ,1 7 a.a = 2 8 print(A.a, a.a, b.a) 9 #输出 1, 2, 1 既然是类属性,为什么b的没有改变? 10 A.a = 3 11 print(A.a, a.a, b.a) 12 # 3, 2, 3 为什么b跟随着A改变了,而a没有呢?
第2行,定义了一个类属性 a = 1, 第5行执行 a.a的时候, 发现对象a并没有名字为a的实例属性,于是就去a的类里面查找类属性a
第7行, a.a = 2, 这句代码,会为a添加一个实例属性, 会覆盖掉之前的类属性a,所以产生了10的输出, 而10行的操作,由于a已经有实例属性a,b没有,所以发生了14行的输出
迭代器和生成器
pass 先占个位置
GIL锁
多线程中都会遇到的一个问题,不同线程对共享资源访问的互斥。GIL(Global Interpreter Lock) 全局解释器锁,就是python用来解决这一问题的。python中的GIL是一个非常霸道的实现,他直接作用于python解释器一级。也就是说,在一个线程拥有了解释器的访问权限之后,其他线程都必须等待他释放解释器的访问权限,即使这些线程之间并没有相互影响。
以上是关于关于python,一些整理的主要内容,如果未能解决你的问题,请参考以下文章