Python学习 - 第6天(小数据池)

1、Python2和Python3的区别

  Python2

    print('abc')  print 'abc'

    range()     xrange()生成器

    raw_input()

  Python3

    print('abc')

    range()

    input()

2、Python小数据池

  is  比较,比较的是内存地址  id(内容)

li1 = [1,2,3]
li2 = li1
li3 = li2
print(id(li1),id(li2))

# 1829389950088 1829389950088

  数字,字符串与小数据池

    数字的范围  -5~256

    字符串  1)不能有特殊字符

         2)s*20 还是同一个地址,s*21以后都是两个地址

i1 = 6
i2 = 6
print(id(i1),id(i2))
i3 = 300
i4 = 300
print(id(i3),id(i4))

  剩下的小数据池(list dict tuple set)

    不存在小数据池

l1 = [1,]
l2 = [1,]
print(l1 is l2)

3、编码问题

  1)各个编码之间的二进制,是不能互相识别的,会产生乱码。
  2)文件的储存,传输,不能是unicode(只能是utf-8 utf-16 gbk,gb2312,asciid等)

  在Python3中,str 在内存中是用unicode编码。

  bytes数据类型:

    在Python3以后,字符串和bytes类型彻底分开了。字符串是以字符为单位进行处理的,bytes类型是以字节为单位处理的。

    bytes数据类型在所有的操作和使用甚至内置方法上和字符串数据类型基本一样,也是不可变的序列对象。

    bytes对象只负责以二进制字节序列的形式记录所需记录的对象,至于该对象到底表示什么(比如到底是什么字符)则由相应的编码格式解码所决定。

    Python3中,bytes通常用于网络数据传输、二进制图片和文件的保存等等。

    可以通过调用bytes()生成bytes实例,其值形式为 b'xxxxx',其中 'xxxxx' 为一至多个转义的十六进制字符串(单个 x 的形式为:\x12,其中\x为小写的十六进制转义字符,12为二位十六进制数)组成的序列,每个十六进制数代表一个字节(八位二进制数,取值范围0-255),对于同一个字符串如果采用不同的编码方式生成bytes对象,就会形成不同的值.

  str类型与bytes类型对比:

    对于英文:
      str :表现形式:s = 'alex'
          编码方式: 010101010 unicode
      bytes :表现形式:s = b'alex'
          编码方式: 000101010 utf-8 gbk。。。。

    对于中文:
      str :表现形式:s = '中国'
          编码方式: 010101010 unicode
      bytes :表现形式:s = b'x\e91\e91\e01\e21\e31\e32'
          编码方式: 000101010 utf-8 gbk。。。。

b = b''         # 创建一个空的bytes
b = byte()      # 创建一个空的bytes
b = b'hello'    #  直接指定这个hello是bytes类型
b = bytes('string',encoding='编码类型')  #利用内置bytes方法,将字符串转换为指定编码的bytes
b = str.encode('编码类型')   # 利用字符串的encode方法编码成bytes,默认为utf-8类型

bytes.decode('编码类型'):将bytes对象解码成字符串,默认使用utf-8进行解码。
View Code
s0 = 'alex'
s1 = b'alex'
print(s0,type(s0))
print(s1,type(s1))

4、编码与解码

  encode():编码,将str --> bytes

  becode():  解码,将bytes --> str

s1 = 'alex'
s11 = s1.encode('utf-8')
s11 = s1.encode('gbk')
print(s11)
s2 = '中国'
s22 = s2.encode('utf-8')
s22 = s2.encode('gbk')
print(s22)

  对于bytes,我们只要知道在Python3中某些场合下强制使用,以及它和字符串类型之间的互相转换,其它的基本照抄字符串。

  简单的省事模式:

    string = b'xxxxx'.becode()  直接以默认的utf-8编码解码bytes成string

    b = string.encode()  直接以默认的utf-8编码string为bytes

 

posted @ 2018-07-23 07:51  wing1377  阅读(138)  评论(0编辑  收藏  举报