Python3小知识点

1、id  查询内存地址

name = 'alex'
print(id(name))
li = [1,2,3]
print(id(li))

2、is  判断的是内存地址

==  是比较值,is 是内存地址是否相同

name1 = 'alex@'
name2 = 'alex@'
print(name1 == name2)---Ture
print(name1 is name2)-----Ture

3、小数据池

Python中 int 与 str 存在小数据池,其他类型没有

int 范围 -5 —256—指向一个内存地址

str 如果是全部由字母组成的字符串 都是指向一个内存地址.

如果是数字与str(单个字母)想乘,则20以内(包含20)的是同一个内存地址.

其他数据类型 则没有小数据池概念.

4、编码进阶

4.1 编码回顾

unicode :万国码

A : 0000 0001 0000 0001 0000 0001 0000 0001 32位

中: 0000 0101 0000 0001 0000 0001 0000 0001 32位

升级:utf-8 :用最少8位表示一个字符

A : 0000 0001 8位

欧洲 : 0000 0001 0000 0001 16位

亚洲 中 : 0000 0101 0000 0001 0000 0001 24位

gbk :国标

a : 0000 0001 8位

中 : 0000 0101 0000 0001 16位

不同编码之间是不能互相识别对方的二进制,会报错,或者产生乱码.
在你的字符串(文件),存储,传输时,必须使用非unicode的二进制(01010101).

py3:

字符串:编码方式(在内存中的运行方式):默认都是unicode.

4.2 byte 表现形式

byte

对于非中文: 表现形式: b’alex’

内部编码: utf-8 gbk,gb2312…(非unicode) 你设定的.

对于中文: 表现形式: b’xe3\xf2\x36\xe3\xf2\x36’

内部编码: utf-8 gbk,gb2312…(非unicode) 你设定的.

str

对于非中文: 表现形式: ‘alex’

内部编码: unicode

对于中文: 表现形式: ‘中国’

内部编码: unicode

str >>> byte

b = s.encode(‘utf-8’)

s = 'alex'
b = s.encode('utf-8')
b1 = s.encode('gbk')
print(s,type(s))-----alex 
print(b,type(b))-----b'alex' 
print(b1,type(b1))--b'alex' 
s = '中国'
b = s.encode('utf-8')
b1 = s.encode('gbk')
print(s,type(s))
print(b,type(b))------b'\xe4\xb8\xad\xe5\x9b\xbd' 
print(b1,type(b1))----b'\xd6\xd0\xb9\xfa' 

  转载请注明: My blog Python3小知识点

  目录