python全栈闯关--6-小知识点总结
1、python2和python3区别常用整理
# python2
print 'abc'
# 返回一个列表
range()
# 返回一个生成器值,不是list。每次只生成一个值,避免暂用很大的内存
xrange() # 生成器
# 输入
raw_input(...)
# python3
print('abc')
# 返回一个迭代值,需要生成列表就需要使用list(range(...))
range()
input(...)
2、复制 == 比较值是否相等 is 比较,比较的是内存地址 id(内容)
>>> li1 = [1,2,3] >>> li2 = li1 >>> pring(id(li1),id(li2)) >>> print(id(li1),id(li2)) 2472533256584 2472533256584 # 数字和字符串存在小数池,小数池范围内,使用的是同一个内存地址 # 数字 -5~256 >>> i1 = 6 >>> i2 = 6 >>> print(id(i1),id(i2)) 140717920019440 140717920019440 >>> i1 = 300 >>> i2 = 300 >>> print(id(i1),id(i2)) 2472536947344 2472536947248 >>> i1 = 256 >>> i2 = 256 >>> print(id(i1),id(i2)) 140717920027440 140717920027440 >>> i2 = 257 >>> i1 = 257 >>> print(id(i1),id(i2)) 2472536947344 2472536947248 >>> i1 = -5 >>> i2 = -5 >>> print(id(i1),id(i2)) 140717920019088 140717920019088 >>> i2 = -6 >>> i1 = -6 >>> print(id(i1),id(i2)) 2472536947344 2472536947248
# 字符串: 1、不能有特殊字符 # 2、s*20 还是同一个地址,s*21以后都是两个地址(有待考证,试验时,* 1以上,都变化了。估计是版本不同导致) >>> s1 = '121212asdasdasdadasdasdasdadadqrjladksfjaiodfu' >>> s2 = '121212asdasdasdadasdasdasdadadqrjladksfjaiodfu' >>> print(id(s1),id(s2)) 2472537146064 2472537146064 >>> s1 = '121212asdasdasdadasdasdasdadadqrjladksfjaiodfu@' >>> s2 = '121212asdasdasdadasdasdasdadadqrjladksfjaiodfu@' >>> print(id(s1),id(s2)) 2472537146160 2472537146064 # list、dict、tuple、set # list >>> l1 = [1,] >>> l2 = [1,] >>> print(l1 is l2) False >>> >>> l2 = l1 >>> print(l1 is l2) True
3、字符集编码
ascii
A : 00000010 8位 一个字节
unicode A : 00000000 00000001 00000010 00000100 32位 四个字节
中:00000000 00000001 00000010 00000110 32位 四个字节
utf-8 A : 00100000 8位 一个字节
中 : 00000001 00000010 00000110 24位 三个字节
gbk A : 00000110 8位 一个字节
中 : 00000010 00000110 16位 两个字节
1,各个编码之间的二进制,是不能互相识别的,会产生乱码。
2,文件的储存,传输,不能是unicode(只能是utf-8 utf-16 gbk,gb2312,asciid等)
py3:
str 在内存中是用unicode编码。
bytes类型
对于英文:
str :表现形式:s = 'beer'
编码方式: unicode
bytes :表现形式:s = b'beer'
编码方式: utf-8 gbk。。。。
对于中文:
str :表现形式:s = '熊大'
编码方式: unicode
bytes :表现形式:s = b'\xe9\x9b\x84\xe5\xa4\xa7'
编码方式: utf-8 gbk。。。。
>>> s = 'beer' >>> s1 = b'beer' >>> print(s,type(s)) beer <class 'str'> >>> print(s1,type(s1)) b'beer' <class 'bytes'> >>> >>> >>> s = '雄大' >>> print(s,type(s) ) 雄大 <class 'str'> >>> s1 = b'雄大' SyntaxError: bytes can only contain ASCII literal characters. >>> >>> >>> s1 = s.encode('utf-8') >>> print(s1) b'\xe9\x9b\x84\xe5\xa4\xa7' >>> s1 = s.encode('gbk') >>> print(s1) b'\xd0\xdb\xb4\xf3'