• Python学习


    1、Python中的可变类型和不可变类型都有哪些?
    1) 可变数据类型与不可变数据类型区别

    不可变数据类型:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型。

    可变数据类型:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型。

    2)python中的可变数据类型与不可变数据类型

    python可变数据类型包括:字典、列表、集合;

    python不可变数据类型包括:元组、字符串、数字;

    3)实例

    接下来我们就用列表和字符串来证实上面的定义。

    ① 列表实例:

    图片

    输出结果如下:

    ['公众号', 'ITester软件测试小栈'] 3015290906944
    ['公众号', 'ITester软件测试小栈', 'coco'] 3015290906944

    从结果可以看出,列表添加值前后的内存地址未发生变化,所以列表属于可变类型。

    ② 字符串实例:

    图片

    输出结果如下:

    ITester 2159488347184
    ITester软件测试小栈 2159483796656

    从结果可以看出,字符串值变化前后内存地址发生了变化,所以列表属不于可变类型。

    2、Python中的intern机制,你有了解过吗?

    1)intern机制概念

    所谓的 intern 机制,就是在程序运行过程中创建新的字符串的时候,首先根据这个字符串,驻留池里面查找是否这个字符串,在这个驻留池里面已经创建了;

    如果有的话就已经直接拿过来用,如果没有的话就在重新创建;创建之后如果是一个纯单词字符的话,会加入到这个驻留池当中,这样的一个机制,能够避免频繁的创建和销毁;

    2)intern机制实例

    值同样的字符串对象仅仅会保存一份,是共用的,这也决定了字符串必须是不可变对象。

    图片

    输出结果如下:

    ITester软件测试小栈 1768497265840
    ITester软件测试小栈 1768497265840

    我们发现值相同的字符串经过 intern 机制处理之后,返回的都是同一个字符串对象,这种方式在处理大数据的时候无疑能节省更多的内存空间,系统无需为相同的字符串重复分配内存,对于值相同的字符串共用一个对象即可。

    3、Python 中 *args 和 **kwargs 的作用?
    1)*args 和 **kwargs概念在Python源码中,我们有时发现函数的参数里有*argds,**kwargs这两个参数,那它们分别代表啥意思呢?

    args 是 arguments 的缩写,表示位置参数,kwargs 是 keyword arguments 的缩写,表示关键字参数。

    这其实就是 Python 中可变参数的两种形式,并且 *args 必须放在 **kwargs 的前面,因为位置参数在关键字参数的前面。

    2)*args 和 **kwargs实例

    图片

    输出结果如下:

    args= ('ITester', '软件测试小栈')
    kwargs= {'name': 'coco'}

    *args能够接收不定量的非关键字参数,会把位置参数转化为tuple。

    **kwargs允许你传递不定量个关键字参数。如果你需要在函数中定义不定量个命名参数,那么你就要使用**kwargs了,它会把关键字参数转化为dict(键值对参数组)。

    4、Python 中 with 操作文件为什么不用手动关闭,原理是什么?

    1)上下文管理器概念

    Python 中的 with 关键字,它是用来启动一个对象的上下文管理器的;

    他的原理是:当我们使用 with 去通过 open 打开文件的时候,它会触发文件对象的上下文管理器,然后当 with 当中的代码运行结束后,会自动去调用上下文管理器的退出方法,在这个方法中他会去调用 close 来关闭文件,所以不需要我们手动去关闭文件。

    2)上下文管理器实例

    ① 不用上下文管理器实例

    Python 程序打开一个文件后,往文件中写内容,写完之后,就要关闭该文件,否则会出现什么情况呢?极端情况下会出现 "Too many open files" 的错误,因为系统允许你打开的最大文件数量是有限的。

    举个实例:

    图片

    当然处理这种我们可以使用try捕捉异常处理,finally关闭文件,代码如下:

    图片

    上面的处理方式稍微繁琐,我们要拿出更简洁的with上下文管理器。

    ② 使用上下文管理器实例

    图片 

    3)自定义上下文管理器

    任何实现(重写)了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器。

    __enter__():进入上下文管理器自动调用的方法,该方法会在 with as 代码块执行之前执行;

    __exit__():退出上下文管理器自动调用的方法。

    """
    @Author:公众号:ITester软件测试小栈
    @Time : 2021/7/21 18:41
    """
    class FileOpen(object):

        def __init__(self, filename, mode):
            self.filename = filename
            self.mode = mode

        def __enter__(self):
            print("entering")
            self.f = open(self.filename, self.mode)
            return self.f

        def __exit__(self, *args):
            print("will exit")
            self.f.close()

    if __name__ == '__main__':
        with FileOpen("ITester.txt", "w") as f:
            f.write("ITester软件测试小栈")

    输出结果如下:

    entering
    will exit
  • 相关阅读:
    ios原生项目内嵌u3d工程
    u3d内嵌H5游戏 设置cookie
    unity3d IL2CPP for android
    unity3D内嵌android项目
    Django 跨域问题
    tensorflow 调试tfdbg
    Cuda9.1+cunn7.1+Tensorflow1.7-GUP
    shader
    lua 中protobuf repeated 嵌套类 复合类型
    30岁的思考
  • 原文地址:https://www.cnblogs.com/chenyablog/p/15191667.html
Copyright © 2020-2023  润新知