• Python小数据池,代码块 第三天


       今日内容一些小的干货       

    python小数据池,代码块的最详细、深入剖析

     

    一,id,is,==

    在Python中,id是什么?id是内存地址,比如你利用id()内置函数去查询一个数据的内存地址:

    name = '太白'
    print(id(name))  # 1585831283968

    那么 is 是什么? == 又是什么?

    == 是比较的两边的数值是否相等,而 is 是比较的两边的内存地址是否相等。 如果内存地址相等,那么这两边其实是指向同一个内存地址。

    可以说如果内存地址相同,那么值肯定相同,但是如果值相同,内存地址不一定相同。

    二,代码块。

    根据官网提示我们可以获知:

     View Code

    上面的主要意思是:

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

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

    而作为交互方式输入的每个命令都是一个代码块。

    什么叫交互方式?就是咱们在cmd中进入Python解释器里面,每一行代码都是一个代码块,例如:

    而对于一个文件中的两个函数,也分别是两个不同的代码块:

    OK,那么现在我们了解了代码块,这和小数据池有什么关系呢?且听下面分析。

    代码块的缓存机制

    Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用。换句话说:执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么它会重复使用这个字典中的之前的这个值。所以在你给出的例子中,文件执行时(同一个代码块)会把i1、i2两个变量指向同一个对象,满足缓存机制则他们在内存中只存在一个,即:id相同。

    代码块的缓存机制的适用范围: int(float),str,bool。

    int(float):任何数字在同一代码块下都会复用。

    bool:True和False在字典中会以1,0方式存在,并且复用。

    str:几乎所有的字符串都会符合缓存机制,具体规定如下(了解即可!):

    1,非乘法得到的字符串都满足代码块的缓存机制:

    s1 = '太白@!#*ewq'
    s2 = '太白@!#*ewq'
    print(s1 is s2)  # True

    2,乘法得到的字符串分两种情况:

      2.1 乘数为1时,任何字符串满足代码块的缓存机制:

    b1 = '太白@5847395QQ0743895*&^%$#((&_+(())' *1
    a1 = '太白@5847395QQ0743895*&^%$#((&_+(())' *1
    
    print(a1 is b1)  # True

      2.2 乘数>=2时:仅含大小写字母,数字,下划线,总长度<=20,满足代码块的缓存机制:

    s1 = 'old_' * 5
    s2 = 'old_' * 5
    print(s1 is s2)  # True

     优点:能够提高一些字符串,整数处理人物在时间和空间上的性能;需要值相同的字符串,整数的时候,直接从‘字典’中取出复用,避免频繁的创建和销毁,提升效率,节约内存。

     

  • 相关阅读:
    Kubernetes 服务入口管理 Traefik Ingress Controller
    flex的titlewindow如何自适应浏览器的宽度和高度
    JQuery的事件中使用this
    jQuery控制 input 不可编辑
    jquery 操作 input显示或者隐藏
    Word 创建模板
    HTML转PDF
    SQL server 自增主键重新从1开始
    读取 .properties文件到数据库
    根据json生成java实体类文件
  • 原文地址:https://www.cnblogs.com/Py-king/p/10321547.html
Copyright © 2020-2023  润新知