• Python基础Day6


    一、代码块

    一个模块(模块就是py文件),一个函数,一个类,一个文件都是一个代码块,一个整体是一个代码块。

    交互模式的每一行都是一个代码块(交互模式:命令提示符),相当于每行都在不同的文件

     

     

    二、id

    id就是对象的内存地址

    相当于内存里空间的门牌号,每个id都是唯一的,找到内存地址就是对象,id相同就是指向同一个对象

    在内存中id是唯一的,如果两个变量指向的id相同,就证明它们在内储存中是同一个

     

     

    三、is

    is 是判断两个变量的id是否相同

    == 是判断两个变量的值是否相等

    如果is是True,==一定是True;如果==是True,两个变量的id不一定相同

     

    四、小数据池(缓存机制,驻留机制)

    小数据池的作用的数据类型:整型、字符串、布尔值

    python对内存做的一个优化:将-5~256的整数,以及一些规则的字符串,提前在内存中创建了池(容器),容器里固定存储了这些数

     

     优点:

    ① 节省内存(不用每次创建变量都开辟内存空间)

    ② 提高性能与效率(减少运行时间)

     

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

     

    int:那么大家都知道对于整数来说,小数据池的范围是-5~256 ,如果多个变量都是指向同一个(在这个范围内的)数字,他们在内存中指向的都是一个内存地址。

     

    str:字符串要从下面这几个大方向讨论:

    1,字符串的长度为0或者1,默认都采用了驻留机制(小数据池)。

    2,字符串的长度>1,且只含有大小写字母,数字,下划线时,才会默认驻留。

     

    3,用乘法得到的字符串,分两种情况。

      3.1 乘数为1时:

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

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

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

      3.2 乘数>=2时:

    仅含大小写字母,数字,下划线,总长度<=20,默认驻留。

     

    五、代码块与小数据池

    代码块内的缓存机制,和代码块与代码块之间的缓存机制不同!

    python在同一个代码块中的变量,初始化对象的命令时,它会将变量与值的对应关系放到一个字典中。

    如果下面的代码在遇到初始化对象的命令,它会先从字典中寻找,若存在相同的值,它会复用,指向的都是同一个内存地址。

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

    # 同一个代码块下,数字,字符串,bool值的复用成立。
    a1 = 1000
    a2 = 1000
    print(id(a1),id(a2))  # 2419837390800 2419837390800
    
    s1 = 'alexsb@'
    s2 = 'alexsb@'
    
    print(id(s1),id(s2))  # 2278732245624 2278732245624  
    
    f1 = True
    f2 = True
    print(id(f1),id(f2))  # 1672093872 1672093872
    
    # 同一个代码块下,元祖,列表,字典的复用不成立。
    tu1 = (1,2,3)
    tu2 = (1,2,3)
    print(id(tu1),id(tu2))  # 2278732278088 2278732279312
    
    l1 = [1, 2, 3]
    l2 = [1, 2, 3]
    print(id(l1),id(l2))  # 2278733685000 2278733685192
    
    dic1 = {'name':'taibai'}
    dic2 = {'name':'taibai'}
    print(id(dic1),id(dic2))  # 2278728382728 2278728382856

     

    python对于不同的代码块:初始化对象的命令时,它会从小数据池中寻找。

     

     六、编码

    ① 编码之间不能互相识别

    ② 网络传输、文件存储以二进制方式,必须是以非unicode的编码方式执行

     

    大环境Python3 版本

    str:内存(内部)的编码方式为unicode

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

     

    str和bytes的表现形式:

     

    s1 = 'aaa'
    b1 = b'aaa'
    print(s1,type(s1))
    print(b1,type(b1))
    
    # 结果
    aaa <class 'str'>
    b'aaa' <class 'bytes'>

     

     

    str与bytes的区别:

    ①英文字母

        str的形式: s1 = 'aaa'

    str的内部编码形式:unicode

     

      bytes的表现形式: b1 = b'aaa'

    bytes的内部编码形式:非unicode(自定义编码格式)

     

    ②中文

    bytes不能存储中文,会报错

     

    所以要进行文件存储和网络传输,必须将str转换为bytes(str ---> bytes ---> 文件存储与网络传输)

     

    bytes的使用方式:

    如果想将一部分内容(字符串)写入文件,或者通过网络socket传输,这部分的内容(字符串)必须转化成bytes类型才可以进行。

    平常写代码使用str即可。

     

    str转换成bytes (str ---> bytes )

    由于bytes不能存储中文,以非unicode编码的十六进制存储

    s1 = '哈哈'
    b1 = s1.encode('utf-8')     # 指定转换的编码
    print(b1,type(b1))
    
    # 结果
    b'xe5x93x88xe5x93x88' <class 'bytes'>

     

     

    bytes转换成str (bytes ---> str)

    b2 = b'xe5x93x88xe5x93x88'
    s2 = b2.decode('utf-8')      # bytes的编码,解码为str
    print(s2,type(s2))
    
    # 结果
    哈哈 <class 'str'>

     

    https://www.cnblogs.com/jin-xin/articles/9439483.html

  • 相关阅读:
    [CF1475F] Unusual Matrix
    [JXOI2018] 游戏
    [ZJOI2010] 排列计数
    [CF1474E] What Is It?
    [CF375D] Tree and Queries
    [CF519E] A and B and Lecture Rooms
    [CF321C] Ciel the Commander
    [CF1C] Ancient Berland Circus
    [CF321A] Ciel and Robot
    [CF1450C1] Errich-Tac-Toe (Easy Version)
  • 原文地址:https://www.cnblogs.com/st-st/p/9451045.html
Copyright © 2020-2023  润新知