山口里子,新湘西剿匪记,一起操妹妹
目录
id
是一个内置的函数,可以查看变量存放的内存地址(实际上不是真正的物理地址,这里暂时这样理解),用于判断是变量否属指向了同一块内存地址下面来看几个例子,以及具体的使用方法:
in [1]: a = 'abc' in [2]: b = 'abc' in [3]: a == b out[3]: true in [4]: a is b out[4]: true in [5]: c = 100 in [6]: d = 100 in [7]: c == d out[7]: true in [8]: c is d out[8]: true in [9]:
通过上面的例子可以总结出:字符串和数字在之前有定义过的话,后续再用到这个变量时,不会再分配内存,而是直接把新的变量直接指向之前定义过的值,因此使用is
判断时结果都为true,这种机制被称作为缓存机制。但是这里也有比较坑的一点,我们再来看下面的例子:
in [9]: c = 1000 in [10]: d = 1000 in [11]: c is d out[11]: false in [12]:
同样是数字,但是100和1000的结果却不一样,这个要根据下面的一个知识点来看。
通过上面的例子可以看出,100和1000的值在经过相同的运算之后得到不同的结果,那么我们可以这样认为:如果内存地址一样,那么对应的值一定是相等的,但是反过来值一样的话内存地址不一定一样;我们先在来看几个例子:
in [15]: a = -5 in [16]: b = -5 in [17]: a is b out[17]: true in [18]: c = -6 in [19]: d = -6 in [20]: c is d out[20]: false in [21]: c = 300 in [22]: d = 300 in [23]: c is d out[23]: false in [24]:
这种现象是因为小数据池的存在。小数据池(非官方解释):是一种缓存机制,也被称为驻留机制,其他语言中也有类似的机制,他会把数据存储起来方便下次赋值时使用,以避免多个内存存放相同值的元素。
小数据池对数据的处理方法:
使用小数据池的优缺点:
编码回顾:
在网络传输和文件存储中,经常需要在各种编码之间转换,最常用的如utf-8和unicode等。
unicode的表现形式:即python程序存储在内存中的字符串
byte表现的形式:
字符编码之间的转换使用encode和decode操作:
in [24]: a = 'i like python' in [25]: b = '我喜欢python' in [26]: a.encode('utf-8') out[26]: b'i like python' in [27]: b.encode('utf-8') # 编码成utf-8字符 out[27]: b'\xe6\x88\x91\xe5\x96\x9c\xe6\xac\xa2python' in [28]: c = b'\xe6\x88\x91\xe5\x96\x9c\xe6\xac\xa2python' in [29]: c.decode('utf-8') # 以utf-8的编码来解码 out[29]: '我喜欢python' in [30]: b out[30]: '我喜欢python' in [31]: b.encode('gbk') out[31]: b'\xce\xd2\xcf\xb2\xbb\xb6python' in [32]: e = b'\xce\xd2\xcf\xb2\xbb\xb6python' in [33]: e.decode('gbk').encode('utf-8') # 把gbk编码转换成utf-8编码 out[33]: b'\xe6\x88\x91\xe5\x96\x9c\xe6\xac\xa2python' in [34]: f = e.decode('gbk').encode('utf-8') in [35]: f.decode('utf-8') out[35]: '我喜欢python' in [36]:
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
python求numpy中array按列非零元素的平均值案例
网友评论