• Python学习笔记-Day6


    内容大纲:

    一、代码块

    二、is 、== 、id

    三、小数据池

    四、代码块与小数据池的关系

    五、编码2

    一、代码块

    代码块:一个模块、一个函数、一个类、一个文件都是一个代码块。

    而作为交互式方式输入的每一个命令行都是代码块(交互式方式输入:在cmd中进入Python解释器里面,每一行代码都是一个代码块)

    例如:用cmd运行python,每行都是一个代码块

    在一个程序中的两个函数体也是两个代码块,例如:

    def func():
        pass
    def func1():
        pass

    二、id、is 、==

    id:在python中,id就是内存地址。例如使用id()内置函数去查询一个数据的内存地址:

    name='wenghuitian'
    print(id(name))
    #输出结果是name的内存地址:2151381407344(每次运行时的id地址都不一样)

    ==:比较两边的数值是否相等

    is:比较两边的id是否相同

    如果说内存地址相同,那么值一定相同;如果值相同,内存地址不一定相同。

     三、小数据池

    概念:小数据池也叫小整数缓存机制,或者称为驻留机制。

    小数据池只针对于 整数、字符串、bool值。

    整数:Python自动将-5~256的整数进行了缓存。就是说当你将这些整数赋值给变量时,并不会创建新的对象(不会在内存中开辟新的房间给变量),而是使用已经创建好的对象。

    例如:

    字符串:python会将一定规则的字符串放在字符串驻留池中,当你将这些字符串赋值给变量时不会创建新的对象,而是使用在字符串驻留池中已经创建好的对象。

    小数据池对于字符串的规定要从以下四个方面进行讨论:

    1、字符串长度为0或者1时,默认采用了驻留机制

    2、字符串长度>1,且只含有大小写字母,数字,下划线时候,默认采用驻留机制

     

    3、用乘法得到的字符串

    ①乘数为1时:

    .仅含有大小写字母、数字、下划线,默认驻留

    .含其他字符,长度<=1,默认驻留

    .含其他字符,长度>1,默认驻留

    ②乘数>=2时:仅含有大小写字母,数字,下划线,总长度<=20,默认驻留

    4、指定驻留:你可以指定任意的字符串加入到小数据池中,让其只在内存中创建一个对象,多个变量都是指向这一个字符串

     

    小数据池的优点:需要值相同的字符串和整数时,能够直接进行调用,避免频繁的创建和销毁,提升效率,节约内存。

    缺点:在池中创建或插入字符、整数时,会发费更多的时间。

     

     四、代码块与小数据池的关系

     i1 = 1000

    i2 = 1000

    print(i1 is i2)

    同样一段代码,在Pycham和交互方式执行的结果不同。在Pycharm中,结果是True,在cmd下结果是False。

    因为代码块内的缓存机制和代码块和代码块之间的缓存机制不同。

    Python在执行同一个代码块的初始化对象命令时,会检查其值是否已经存在,如果存在,会将其重用。换句话说,执行同一个代码块,遇到初始化对象的命令时,会将初始化的变量和值存储在一个字典中,在遇到新的变量时,会在字典中查询记录,如果有同样的记录,那么会重复使用字典中的这个值。

    如果是不同的代码块,会看这两个变量的值是否满足小数据池的范围,如果满足则指向同一个地址。

    对于同一个代码块的变量复用的问题,只能针对于数字,字符串,bool值,而对于其他数据类型是不成立的。

     五、数据类型

    ASCII:字母、数字、特殊字符,8位表示

    Unicode:万国码,包含所有的文字

    初期:一个字符16位

    改版:一个字符32位

    Utf-8:对Unicode升级

    英文:8位

    欧洲文字:16位

    中文:24位

    gbk(GB2312):字母、数字、特殊字符、中文

    英文:8位

    中文:16位

    1、编码之间能不能互相识别:不能互相识别

    2、网络传输或者硬盘存储的二进制必须是以非Unicode编码方式

     

    大环境Python3x:

    str:内部编码方式是Unicode。所以python文件中的字符串不能直接进行文件存储和传输。

    bytes:python中的基础数据类型之一,与str相当于双胞胎。str拥有的所有方法,bytes类型都适用。

    str与bytes的区别:

    1、英文字母:

    str:

      表现形式:s1 =“alex”

      内部编码方式:Unicode

    bytes:

      表现形式:b1 = b"alex"

      内部编码方式:非Unicode

     

    2、中文

    str:

      表现形式:s1 =“太白”

      内部编码方式:Unicode

     

    bytes:

      表现形式:b1 = s1.encode(‘utf-8’)

      内部编码方式:非Unicode

     

    如何使用:

    你想将一部分内容(字符串)写入文件,或者通过网络socket传输,这样部分内容(字符串),必须转化成bytes类型。

    str---> bytes

    encode             

    bytes ---> dtr

    decode

     

    s1 = '天气晴朗'
    d1 = s1.encode('gbk')
    print(d1)
    s2 = d1.decode('gbk')
    print(s2)
    
    输出结果是:
    b'xccxecxc6xf8xc7xe7xc0xca'
    天气晴朗

                                                                             

     

     

  • 相关阅读:
    使用arthas排查cpu飙高问题
    可转债发行一览表2022最新
    图解SSD不同的接口:SATA、MSATA、M.2 SATA、M.2 NVME
    eclipse maven 打war包的几种方式
    eclipse 在配置外部工具时可使用如下变量:
    LVS与Nginx区别
    maven
    mac下安装vuecli时报错error 13
    第一次使用Android Studio时你应该知道的一切配置
    window DOS命令官方介绍
  • 原文地址:https://www.cnblogs.com/tian-tian/p/9450626.html
Copyright © 2020-2023  润新知