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'

 

上一篇:double,int等数据类型转换,传输,还原的示例


下一篇:一道 Java 方法传值面试题——Java方法传值的值传递概念和效果 + Integer 缓存机制 + 反射修改 private final 域