• 再谈编码---小数据池(概念)


      

    1. 小数据池
    小数据池
    在说小数据池之前. 我们先看一个概念. 什么是代码块:
    python程序是由代码块构成的. 一个代码块的文本作为python程序执行的单元.
    代码块: 一个模块, 一个函数, 一个类, 甚至每一个command命令都是一个代码块. 一个文件也是一个代码块, eval()和exec()执行的时候也是一个代码块

    小数据池. 一种数据缓存机制. 也被称为驻留机制.
    小数据池只针对: 整数, 字符串串, 布尔值. 其他的数据类型不存在驻留机制

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

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

    对于数字: -5~256是会被加到小数据池中的. 每次使用都是同一个对象.
    对于字符串:
    1. 如果字符串的长度是0或者1, 都会默认进行缓存
    2. 字符串长度大于1, 但是字符串中只包含字母, 数字, 下划线时才会缓存
    3. 用乘法的到的字符串.
    ①. 乘数为1, 仅包含数字, 字母, 下划线时会被缓存. 如果包含其他字符, 而长度<=1 也会被驻存,
    ②. 乘数大于1 . 仅包含数字, 字母, 下划线这个时候会被缓存. 但字符串长度不能大于20
    4. 指定驻留. 我们可以通过sys模块中的intern()函数来指定要驻留的内容.

    在代码块内的缓存机制是不一样的. 在执行同一个代码块的初始化对象的命令时, 会检查是否其值是否已经存在,
    如果存在, 会将其重用. 换句句话说: 执行同一个代码块时, 遇到初始化对象的命令时,
    他会将初始化的这个变量与值存储在一个字典中, 在遇到新的变量时, 会先在字典中查询记录,
    如果有同样的记录那么它会重复使用这个字典中的之前的这个值. 所以在你给出的例子中, 文件执行时(同一个代码块) 会把a, b两个变量指向同一个对象.
    如果是不同的代码块, 他就会看这个两个变量是否是满足小数据池的数据, 如果是满足小数据池的数据则会指向同一个地址.
    所以: a, b的赋值语句分别被当作两个代码块执行, 但是他们不满足小数据池的数据所以会得到两个不同的对象, 因而is判断返回False.

    2. is和==的区别
    1. id()
    通过id()我们可以查看到⼀一个变量表示的值在内存中的地址.
    s = 'alex'
    print(id(s)) # 4326667072
    2. is和==
    == 判断左右两端的值是否相等. 是不是一致.
    is 判断左右两端内容的内存地址是否一致. 如果返回True, 那可以确定这两个变量使用的是同一个对象

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


    3. 编码的问题
    1. python2中默认使用的是ASCII码. 所以不支持中文. 如果需要在Python2中更改编码.
    需要在文件的开始编写:
    # -*- encoding:utf-8 -*-
    2. python3中: 内存中使用的是unicode码.
    编码回顾:
    1. ASCII : 最早的编码. 里面有英文大写字母, 小写字母, 数字, 一些特殊字符. 没有中文,
    8个01代码, 8个bit, 1个byte
    2. GBK: 中文国标码, 里面包含了了ASCII编码和中文常用编码. 16个bit, 2个byte
    3. UNICODE: 万国码, 里面包含了全世界所有国家文字的编码. 32个bit, 4个byte, 包含了ASCII
    4. UTF-8: 可变长度的万国码. 是unicode的一种实现. 最小字符占8位
    1.英文: 8bit 1byte
    2.欧洲文字:16bit 2byte
    3.中文:24bit 3byte
    综上, 除了了ASCII码以外, 其他信息不能直接转换.


    encode("GBK") # 编码
    decode("GBK") # 解码

    *****************
    把GBK转换成UTF-8
    先把GBK转化成Unicode
    再将Unicode转化成UTF-8

  • 相关阅读:
    HDU
    HDU
    A. Reorder the Array
    A. New Building for SIS Codeforce
    HUD Is It A Tree?!!!!!)
    博客园申请博客批准
    一起学CC3200之CRC校验
    新安装CCS 编译问题Process_begin :createProcess
    一起学CC3200之开发环境简介(2)烧录程序
    新安装CCS 后编译出现问题:gmake:No rule to make target clean
  • 原文地址:https://www.cnblogs.com/zpf666/p/9670163.html
Copyright © 2020-2023  润新知