• 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)

    
    
     

     

     

     
  • 相关阅读:
    kubespray 容器存储设备 -- rook ceph
    RBAC 基于权限的访问控制 serviceaccount -- clusterRole clusterRoleBinding
    Kubernetes 1.10.4 镜像 版本
    rook 入门理解
    coredns CrashLoopBackOff 报错
    kubespray -- 快速部署高可用k8s集群 + 扩容节点 scale.yaml
    nginx反向代理 强制https请求 + 非root用户起80,443端口
    nginx rewrite flag
    CentOS7下双网卡iptables端口转发规则
    给php安装openssl扩展
  • 原文地址:https://www.cnblogs.com/hanfe1/p/10277271.html
Copyright © 2020-2023  润新知