• Python 零散知识点琐碎知识


    Python 全局变量 global

    Python 3 assert(断言)

    Python is 与 == 区别

    在 Python 中一切都是对象,对象之间比较是否相等可以用==,也可以用is。==和is操作的区别是:

    is

    比较的是两个对象的id值是否相等,也就是比较俩对象是否为同一个实例对象,是否指向同一个内存地址。

    ==

    比较的是两个对象的内容是否相等,默认会调用对象的__eq__()方法。

     

    使用is注意python关于字符串的intern机制存储
        注意python中创建两个内容一样的变量时(变量名不一样),一般都会在内存中分配两个内存地址分别给这两个变量。即两个变量的内容虽然样,但是变量的引用地址不一样。所以两个变量使用==比较成立,但是使用 is比较不成立。

    但是在python中有两个意外情况:
    1.使用python命令行时对于小整数[-5,256]区间内的整数,python会创建小整数对象池,这些对象一旦创建,就不会回收,所有新创建的在这个范围的整数都是直接引用他即可。所以造成在[-5,256]区间内的整数不同变量只要值相同,引用地址也相同。此范围外的整数同样遵循新建一个变量赋予一个地址。

    2.python中虽然字符串对象也是不可变对象,但python有个intern机制,简单说就是维护一个字典,这个字典维护已经创建字符串(key)和它的字符串对象的地址(value),每次创建字符串对象都会和这个字典比较,没有就创建,重复了就用指针进行引用就可以了。相当于python对于字符串也是采用了对象池原理。(但是注意:如果字符串(含有空格),不可修改,没开启intern机制,不共用对象。比如"a b"和"a b",这种情况使用is不成立的形式 只有在命令行中可以。使用pycharm同样是True,因为做了优化)

    Python3 中的nonlocal用法

    count = 1
    
    def a():
        count = 'a函数里面'    #如果不事先声明,那么函数b中的nonlocal就会报错
        def b():
            nonlocal count
            print(count)
            count = 2
        b()
        print(count)
    
    if __name__ == '__main__':
        a()
        print(count)

    运行结果是:

    a函数里面
    2
    1

    python对象池


    python中,一切皆为对象
    id方法的返回值就是对象的内存地址。
    is运算符,如果引用的是同一个对象则返回true,x is y类似 id(x) == id(y)

    小整数对象池
    [-5, 256] 这些小整数被定义在了一个整数对象池里,当引用小整数时会自动引用整数对象池里的对象,所以这些小整数不会重复创建,当多个变量指向同一个小整数时,实质上它们指向的是同一个对象。
    字符串
    字符串对象是不可变对象,python有个intern机制,简单说就是维护一个字典,这个字典维护已经创建字符串(key)和它的字符串对象的地址(value),每次创建字符串对象都会和这个字典比较,没有就创建,重复了就用指针进行引用就可以了。intern机制处理字符串长度小于等于20且仅由数字字母下划线构成的,只创建一次。
    浮点型
    float类型可以认为每个赋值都是创建一个对象,因为float值很多
    元组
    tuple它是不可变对象,可能是因为查找开销太大,没有实现intern机制,其实就是一个数组,这个数组和c里的数组一样,每次创建都会分配内存空间
    常量池
    在同一个编译单元(PyFunctionObject)里出现的值相同的常量,只会在常量池里出现一份。常量包括大整数,浮点数,字符串。

    嵌套函数:

    python允许创建嵌套函数。也就是说我们可以在函数里面定义函数,而且现有的作用域和变量生存周期依旧不变。

    例子:

    def outer():
        name="python"
    
        def inner():#outer函数内部定义的函数
            print(name)
        return inner()#返回该内部函数
    
    outer()

     x: List[int] = [1, 2, 3, 4]

    1.  
      __call__ : Callable[…, Any] = _call_impl
    2.  
      forward: Callable[…, Any] = _forward_unimplemented

     with open("/tmp/foo.txt") as file:

        data = file.read()

    with transaction(db):
      # do some actions

    REF

    https://blog.csdn.net/qq_26442553/article/details/82195061

    https://www.cnblogs.com/liyang93/p/6669874.html

    https://blog.csdn.net/xingjingb/article/details/81084438

  • 相关阅读:
    华为防火墙server-map、ALG
    华为防火墙来回路径不一致、智能选路随笔
    锐捷交换机修改openssl秘钥加密算法
    华为交换机板卡类型
    H3C交换机堆叠口、MAD检测口
    内网用户使用公网IP访问内部服务
    记一次SSL证书排错
    解析teambition文件为分享链接
    tomcat启动乱码如何解决?
    BOM与DOM的区别与联系
  • 原文地址:https://www.cnblogs.com/emanlee/p/16025508.html
Copyright © 2020-2023  润新知