首页 > 代码库 > 关于python,一些整理

关于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,一些整理