• 小数据池 & 再谈编码


    再谈编码

    • 1.代码块的概述
    • 2. is和==的区别
    • 3. 编码的问题

    1.小数据池

    1.1代码块的概念:

    • Python程序是由代码块构成,一个代码块的文本作为Python程序的执行单元.
    • 代码块:一个模块,一个类,甚至一个command命令都是一个代码块,一个文件也是一个代码块,eval()和exe()执行的时候也是一个代码块.
    •  命令行:我们在控制台CMD中输入python进入的就是python的command模式. 在这里也可以写 python的程序.⼀个command命令就是⼀个python代码块.(在控制台中每一行都是一个代码块)

    1.2is和==的区别

    (1)内存地址 id():

    通过id()我们可以查看到⼀个变量表示的值在内存中的地址.   

    a = 1000
    print(id(a))  # 内存的开辟是由解释器来完成的.

    (2)is和==

    •  == 判断左右两端的值是否相等. 是不是⼀致.           
    • is 判断左右两端内容的内存地址是否⼀致. 如果返回True, 那可以确定这两个变量使 用的是同⼀个对象
    lst1 = [1,2,3]
    lst2 = [1,2,3]
    print(lst1 == lst2) # 长得一样       #True
    print(lst1 is lst2) # 不是同一个对象     #False
    a = "alex"
    b = "alex"
    print(a == b)
    print(a is b)  #在python中, 默认会把数字, 字符串, 布尔值进行缓存

    (3)关于缓存:

    小数据池.:一种数据缓存机制. 也被称为驻留留机制.各大编程语言中都有类似的东西. 在网上 搜索常量池,小数据池指的都是同⼀个内容. 小数据池只针对: 整数, 字符串, 布尔值. 其他的数据类型不存在驻留机制.当我们在控制台的时候代码块与代码块之间的规则:   

    在python中对-5到256之间的整数会被驻留在内存中. 将一定规则的字符串缓存.   在使用的时候, 内存中只会创建一个该数据的对象. 保存在小数据池中. 当使用的时候直接从小数据池中获取对象的内存引用. 而不需要创建一个新的数据. 这样会节省更多的内存区域.         

    • 优点: 能够提高⼀些字符串, 整数的处理速度. 省略的创建对象的过程.   
    •  缺点: 在'池'中创建或者插入新的内容会花费更更多的时间.       

    数字:

    •  -5~256是会被加到小数据池中的. 每次使用都是同⼀一个对象.   

    字符串:

    • 1. 如果字符串串的长度是0或者1, 都会默认进⾏行行缓存
    • 2. 字符串长度⼤大于1, 但是字符串串中只包含字母, 数字, 下划线时才会缓存
    • 3. 用乘法的到的字符串. ①. 乘数为1, 仅包含数字, 字母, 下划线时会被缓存. 如果包含其他字符, 而⻓长度<=1 也会被驻存, ②. 乘数大于1 . 仅包含数字, 字母, 下划 线这个时候会被缓存. 但字符串长度不能大于20
    • 4. 指定驻留. 我们可以通过sys模块中的intern()函数来指定要驻留留的内容,from sys import intern intern()制定缓存的内容

    在py文件里

            一个代码块内部. 只会缓存int, str, bool 也有自己的小数据池。 缓存的范围会比外面的代码块的数据池要大

    •  数字。都会缓存。 运算的结果不缓存(-5~256 会缓存)
    •  字符串。 默认的字符串都缓存. 如果有乘法。 遵循上方的结论
    •  布尔值。 默认缓存

    3. 编码的问题

    (1) 相关概述

    • 位(bit)  字节(byte)
    • ASCII: 8bit 1byte 英文字母 数字 特殊字符.
    • GBK: 16bit 2byte 主要是存中文。日文, 韩文, 繁字体。 中文的特殊字符 中国 (abcd)
    • UNICODE: 32bit 4byte4. UTF-8: 可变长度的unicode
    • 英文: 8bit, 1byte     欧洲文字:16bit, 2byte     中文: 24bit, 3byte (abcd)
    • GBK和UTF-8不能直接互换

    另外: 位与字节的关系

    1字节 = 8 位
    位(bit),数据存储是以“字节”(Byte)为单位,数据传输是以大多是以“位”(bit,又名“比特”)为单位,
    一个位就代表一个0或1(即一个二进制),二进制是构成存储器的最小单位,每8个位(bit,简写为b)组成一个字节(Byte,简写为B),
    字节是最小一级的信息单位
    View Code

    (1)转码 

    • 在python2里面. 默认的编码是ASCII
    • 在python3中unicode是可以使用的。 默认用的就是Unicode. 代码用utf-8来存储

    (2) 编码  :把unicode 转换成utf-8  

    s = "刘伟很皮" # 12个字节
    abc = s.encode("UTF-8")  # encode之后的结果是bytes类型  依然是原来的字符串
    print(abc)  # b'数据'    #b'xe5x88x98xe4xbcx9fxe5xbex88xe7x9axae'

    (3)解码: 

    abc = b'xe5x88x98xe4xbcx9fxe5xbex88xe7x9axaf'
    s = abc.decode("UTF-8") # 解码。 用什么编码, 就用什么解码
    print(s)
    s = "周星驰"
    print(s.encode("GBK"))
    bs = b'xd6xdcxd0xc7xb3xdb'
    print(bs.decode("GBK")) # GBK的编码不能用UTF-8解码
    # GBK的编码. 把这句话变成UTF-8
    bs =b'xd6xdcxd0xc7xb3xdb'
    # 先解码
    s = bs.decode("GBK")
    # 重新编码
    bs2 = s.encode("UTF-8")
    print(bs2)

     

     

     

  • 相关阅读:
    自顶向下的单元测试策略
    孤立的测试策略
    单元测试
    控制流与数据流,信息流
    白盒测试的特点
    白盒测试
    黑盒测试优缺点
    appium对博客园APP进行自动化测试
    招聘测试人员,我在面试什么?
    测试开发这一年
  • 原文地址:https://www.cnblogs.com/wcx666/p/9621249.html
Copyright © 2020-2023  润新知