zoukankan      html  css  js  c++  java
  • python之路day06-python2/3小区别,小数据池的概念,编码的进阶str转为bytes类型,编码和解码

    python2
    #print() print'abc'
    #range() xrange()生成器
    #raw_input()

    python3
    # print('abc')
    # range()
    # input()

    = 赋值
    == 比较值是否相等
    is 比较的是内存地址是否一致,返回True or False
    id(内容) 返回内容
    li1 =[1,2,3]
    li2 =li1 #赋值
    print(li1 is li2) #True
    print(id(li1),id(li2))#48358464 48358464

    小数据池

    小数据池,也称为小整数缓存机制,或者称为驻留机制等等,博主认为,只要你在网上查到的这些名字其实说的都是一个意思,叫什么因人而异。

    那么到底什么是小数据池?他有什么作用呢?

    大前提:小数据池也是只针对 int(float),str,bool。

    小数据池是针对不同代码块之间的缓存机制!!!

    按数据类型划分
    数字,字符串 ————> 小数据池的概念,在一定的范围内,共用一个内存地址,节省内存空间
    数字的范围 -5-256
    字符串:1/不能含有特殊字符
    2/str*20 还是同一个地址,str*21 后都是两个地址
    i1 =2
    i2 =2
    print(id(i1),id(i2)) #1779386016 1779386016
    
    i1 =300
    i2 =300
    print(id(i1),id(i2)) #58219664 58219664
    
    i1 =300
    i2 =i1 #赋值运算地址是一样的
    print(id(i1),id(i2)) # 51010704 51010704

    剩下的list,dict,tuple,set 都不是一个地址,没有小数据池的概念

    编码的进阶 str--bytes 类型

    ascii   A:00000010  8位 用一个字节来表示一个字母,字符

    unicode A:00000010 00000001 00000010 00000010 32位 4个字节
    中:00000010 00000001 00000010 00000010 32位 4个字节
    utf-8 : A:00000010 8位 一个字节
    中:00000010 00000001 00000010 24位 3个字节

    gbk: A: 00000110 8位一个字节
    中:00000010 00000110 16位2个字节


    1/各个编码之间的二进制,是不能互相识别的,会产生乱码
    2/文件的存储,传输,不能是unicode(只能是utff-8,gbk,ascii等)。因为unicode用4个字节表示一个字符,占用空间太大,传输慢。

    py3:
    文本 str在内存中是用unicdoe编码的。

    bytes类型:也是一种数据类型,是一种特殊的。是以(utff-8,gbk,ascii等编码的)
    str与bytes 方法都差不多,只是内存中编码不同。

    对于英文:
    str: 表现形式 s ='alex'
    编码方式: 010101010 用的是unicode编码


    bytes:表现形式:s = b'alex'
    编码形式:010101010 用的是utff-8,gbk,ascii等编码的

    ps:
    
    s ='alex'
    s1 = b'alex'
    print(type(s),type(s1)) #<class 'str'> <class 'bytes'>
    对于中文:
    str: 表现形式 s ='中国'
    编码方式: 010101010 用的是unicode编码


    bytes:表现形式:s = b'xe91e91e01e21e31e32' 中文显示不出来,所以不用bytes,用str
    编码方式:010101010 用的是utff-8,gbk,ascii等编码的
    
    
    ps:
    
    s ='中国'
    s1 = '中国' #python3中bytes类型中文表示不出来。
    print(type(s),type(s1)) #<class 'str'> <class 'bytes'>
    
    
    encode编码,如何将str-->bytes类型,方便传输存储
    s1 = 'alex'
    s11 = s1.encode('utf-8') #可以设置编码方式
    print(s11,type(s11)) #b'alex' <class 'bytes'>
    
    s2 = '中国'
    s22 = s2.encode('utf-8')
    print(s22,type(s22)) #b'xe4xb8xadxe5x9bxbd' <class 'bytes'>

    字符转编码操作

    unicode相当于一个中介,utf-8要转为GBK,要先decode('utf-8')解码成unicode(--告诉unicode你是什么编码--),后在encode('gbk')编码为GBK。

     encode编码、decode解码

    #str --->byte encode 编码
    # s = '二哥'
    # b = s.encode('utf-8')
    # print(b)

    
    

    # #byte --->str decode 解码
    # s1 = b.decode('utf-8')
    # print(s1)

    
    


    # s = 'abf'
    # b = s.encode('utf-8')
    # print(b)

    # #byte --->str decode 解码
    # s1 = b.decode('gbk')
    # print(s1)

    
    
     

     

     

     
  • 相关阅读:
    《算法竞赛入门经典》 例题35 生成元 (Digit Generator, ACM ICPC Seoul 2005,UVa)
    《算法竞赛入门经典》 例题35 生成元 (Digit Generator, ACM ICPC Seoul 2005,UVa)
    《算法竞赛入门经典》 例题35 生成元 (Digit Generator, ACM ICPC Seoul 2005,UVa)
    SVN分支
    SVN分支
    SVN 版本回退
    SVN 版本回退
    如何在excel中取消合并单元格后内容自动填充?
    如何在excel中取消合并单元格后内容自动填充?
    如何让自己像打王者荣耀一样发了疯、拼了命的学习?
  • 原文地址:https://www.cnblogs.com/hanfe1/p/10277271.html
Copyright © 2011-2022 走看看