首页 > 代码库 > 关于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,一些整理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。