zoukankan      html  css  js  c++  java
  • 小数据池和编码

    小数据池和编码

    小数据池和编码补充

    • python程序是由代码块构成的. ⼀个代码块的⽂本作为python程序执⾏的单元.

    代码块

    • ⼀个模块, ⼀个函数, ⼀个类, 甚⾄每⼀个command命令都是⼀个代码块. ⼀个⽂件也是⼀ 个代码块, eval()和exec()执⾏的时候也是⼀个代码块

    • 在Python中以字典的方式储存(用globals(全局变量)查看) print(globals())

    • 规则:

      数字 : 全部驻留

      字符串:

      • 字符串做惩罚的时候总长度不能超过20
      • 自定义的都驻留
      • 乘数为1的时候 就是赋值
    a = 1
    b = 1
    print(a)
    print(b)
    
    • 先执行代码块, 不符合代码块再执行小数据池驻留

    命令行

    • 我们在控制台CMD中输入python进入的就是python的command模式. 在这⾥也可以写 python的程序.
    • ⽽根据上⾯的官⽅的解释来看. ⼀个command命令就是⼀个python代码块

    is 和 == 的区别

    id (查询内存地址)

    id()
    # 通过id()我们可以查看到⼀个变量表⽰的值在内存中的地址.
    s = 'alex'
    print(id(s)) # 4326667072
    

    ==

    • == 比较的是值(内容)是不是相同,判断左右两端的值是否相等. 是不是⼀致. 地址不一定是同一个

    is

    • 比较的是内存地址是不是相同(是不是同一个对象)
    • 判断左右两端内容的内存地址是否⼀致. 如果返回True, 那可以确定这两个变量使用的是同一个对象
    • 内存地址一样 , 那么他们的值一定是相等的

    我们可以这样认为. 如果内存地址相同. 那么值⼀定是相等的. 如果值相等. 则不⼀定是同⼀ 个对象

    小数据池的优缺点

    • 驻留机制(存储范围): int(-5 - 256)

    int

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

    str

    • 使用sys模块中的缓存字符串
    # 1.当我们在控制台(cnd)的时候, 代码块与代码块之间的规则:
    #  一. 长度小于等于1 会默认缓存
    #  二. 长度大于1 如果字符串中只有数字, 字母,下换线 默认缓存
    #  三. 乘法得到的字符串:
    #    1. 如果乘数是1. 和上面两个方案一致
    #    2. 乘数不是1. 最终长度不能超过20
    #  手动指定缓存  from sys import intern   
    #  格式 :         intern()制定缓存的内容
    #  例 : s = intern(sa3@we*44)
    #  布尔值  默认缓存
    
    # 2. py文件里. 一个代码块内部. 只会缓存int, str, bool 也有自己的小数据池。 缓存的范围会比外面的代码块的数据池要大
    #       1. 数字。都会缓存。 运算的结果不缓存(-5~256 会缓存)
    #       2. 字符串。 默认的字符串都缓存. 如果有乘法。 遵循上方的结论
    #       3. 布尔值。 默认缓存
    
    

    存储类型: (int ,str, bool)

    • ⼩数据池: ⼀种数据缓存机制. 也被称为驻留机制. 各⼤编程语⾔中都有类似的东⻄. 在⽹上搜索常量池,⼩数据池指的都⼀个内容.
    • ⼩数据池只针对: 整数, 字符串, 布尔值. 其他的数据类型不存在驻留机制

    优点:

    • 能够提⾼⼀些字符串, 整数的处理速度.(提高内存使用效率) 省去创建对象的过程.

    缺点:

    • 在'池'中创建或者插入新的内容会花费更多的时间.

    编码补充

    编码回顾:

    • ASCII : 8bit 1byte 英文字母 数字 特殊字符.(ASCII E1)
    • GBK: 16bit 2byte 主要是存中文。日文, 韩文, 繁字体。(GBK C2)
    • UNICODE: 32bit 4byte (万国码) (UNICODE 4)
    • UTF-8: 可变长度的unicode (UTF-8 E1 C3)
      英文 : 8bit,1byte
      欧文 : 16bit, 2byte
      中文 : 24bit, 3byte
    • 在python2里面. 默认的编码是ASCII
    • 在python3中unicode是可以使用的。 默认用的就是Unicode. 代码用utf-8来存储

    bytes的表现形式:

    • 英⽂ b'alex' 英⽂的表现形式和字符串没什么两样
    • 中⽂ b'xe4xb8xad' ⼀个汉字的UTF-8的bytes表现形式
    • bytes是字符串的另一种表示形式

    编码 encode

    编码. 把unicode转换成utf-8
    s = "刘伟很皮" # 12个字节
    abc = s.encode("UTF-8")  # encode之后的结果是bytes类型  依然是原来的字符串
    print(abc)  # b'数据'
    
    • GBK和UTF-8不能直接互换

    解码(译码) decode

    解码  decode
    abc = b'xe5x88x98xe4xbcx9fxe5xbex88xe7x9axaf'
    s = abc.decode("UTF-8") # 解码。 用什么编码, 就用什么解码
    print(s)
    

    小数据池补充

    • 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个id(内存地址)
    • 支持类型: str int(-5~256) bool
  • 相关阅读:
    人人数据挖掘实习生面经
    关于贝叶斯分类中的二项独立模型和多项式模型
    关于序列的面试题1 判断整数序列是否是二叉排序树的后续遍历
    机器学习经典算法之最小二乘法
    协同过滤算法之—slope one算法
    关于序列的面试题2最大连续子序列和以及积
    控制DOUBLE,DECIMAL小数点的位数
    Invoke的用法
    windowForm学习资料总结
    .NET开发编程规范
  • 原文地址:https://www.cnblogs.com/fanxss/p/10988102.html
Copyright © 2011-2022 走看看