zoukankan      html  css  js  c++  java
  • python学习之旅-06 之小数据池,编码

    一、代码块

      python程序的是由代码块构成的。一个代码块的文本作为python程序的执行单元。

      1、在命令行中,每一行都是代码块

      2、在py文件中,整个可执行内容为一个代码块

    二、is 和 == 的区别

      1、id()

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

        s = 'alex'
        print(id(s)) # 4326667072

      2、is 和 ==

        ==判断左右两端的是否相等,是否一致

        is判断左右两端内容的内存地址是否一致。如果返回True,那么可以确定这两个变量使用的是同一个对象

    二、小数据池

     定义: 

      一种缓存机制,也被称为驻留机制,也称为校正数缓存机制。各大编程语言中都有类似的东西。在网上搜索常量池,

    小数据池值得都是同一个内容。

    小数据池只针对:整数,字符串,布尔值。其他的数据类型不存在驻留机制。

    前提条件:在不同一个代码块内

     

    1、在python中对 -5到256之间的整数会被驻留在内存中。将一定规则的字符串缓存。在使用的时候直接从

    小数据池取对象的内存引用,而不需要创建一个新的数据。这样会节省更多的内存区域。

      优点:能够提高一些字符串,整数的处理速度。省略创建对象的过程

      缺点:在"池"中创建或者插入新的内容会花费更多的时间

    对于数字:-5 ~256 是会加到小数据池中的。每次使用都是同一个对象。

    对于字符串:

      a、如果字符串的长度是0或者1,都会默认进行缓存

      b、字符串长度大于1,但是字符串中只包含数字,字母,下划线时才会被缓存

      c、⽤乘法的到的字符串. ①. 乘数为1, 仅包含数字, 字⺟, 下划线时会被缓存. 如果
         包含其他字符, ⽽⻓度<=1 也会被驻存, ②. 乘数⼤于1 . 仅包含数字, 字⺟, 下划
         线这个时候会被缓存. 但字符串⻓度不能⼤于20

      d、指定驻留。我们可以通过sys模块中的 intern()函数来指定要驻留的内容

    2、小数据池和代码块的关系

     a、在comand命令窗口和python 文件中:

      a = 1000

      b = 1000

      print(a is b)

    注意:在py文件中,得到的结果是True,但是在command中是False

    因为:在command窗口中每一行代码都是单独的代码块,会遵循小数据池的缓存机制--整数的范围为(-5-156)

       在py文件中单纯的创建变量都是有缓存的,如若进行了*的操作,则是回到小数据池规定的范围;

     

    三、编码

     1、

      ascii: 数字、字母、特殊字符

        字节:8bit

      gbk:国标码,16bit,2bytes

      unicode:万国码, 32bit, 4bytes

      utf-8:可变长度的unicode

        英文:1byte ,8bit

        欧洲文字:2byte ,16bit

        中文:3byte , 24bit

      注:各编码之间的二进制,是不能相互识别的,会产生乱码

        文件的存储,传输不能是Unicode(只能是utf-8  utf-16  gbk  gb2312  ascii等)

     2、 

      python3 内存中使用的是unicode

      s = "你好啊"

      python2 中使用的是 ascii

    3、

      字符串如果传输:将str--->bytes

      encode(编码) :结果是bytes类型

      接收bytes之后,需要解码

      decode(编码)。结果是字符串

    4、py3:

        str 在内存中是用Unicode编码

          bytes类型

            对于英文:

              str:表现形式: s = 'alex'

                编码方式:010101010  Unicode

              bytes:表现方式:s = b'alex'

                  编码方式:00101010  utf-8 gbk

            对于中文:

                str:表现形式: s = 'alex'

                编码方式:010101010  Unicode

              bytes:表现方式:s = b'xe91e01e21e31e32'

                  编码方式:00101010  utf-8 gbk  ....

  • 相关阅读:
    [Swift]LeetCode1035.不相交的线 | Uncrossed Lines
    [Swift]LeetCode1034.边框着色 | Coloring A Border
    [Swift]LeetCode1033. 移动石子直到连续 | Moving Stones Until Consecutive
    [Swift]美人征婚问题
    [Swift]动态变化顶部状态栏(statusBar)的颜色
    [Swift-2019力扣杯春季决赛]4. 有效子数组的数目
    [Swift-2019力扣杯春季决赛]3. 最长重复子串
    [Swift-2019力扣杯春季决赛]2. 按字典序排列最小的等效字符串
    转 ORA-12638: 身份证明检索失败
    转 构建镜像
  • 原文地址:https://www.cnblogs.com/dandanouni/p/12534035.html
Copyright © 2011-2022 走看看