• python基础六-代码块,小数据池及编码


    代码块:是指一个文件,一个类,一个函数,或在交互式下的每一个行都成为代码块
    一个模块,一个函数,一个类,一个文件等都是一个代码块。
    def func():
    print(333)
    class A:
    name = 'alex'

    交互模式下,每一行是一个代码块。
    >>> i1 = 1000 可以理解为这一行在一个文件中。
    >>> i2 = 1000 可以理解为这一行在另一个文件中。

    is == id的区别
    is 是比较两边数据的地址位id是否相等,返回值为True,False
    is 判断的是两个变量的id值是否相同。

    s1 ='qbc'
    s2 ='qbc'
    print(s1 is s2)
    == 是比较两个元素的值是否相等,返回值为True,False
    s1 ='qbc'
    s2 ='abc'
    print(s1 is s2)
    id # 在内存中id都是唯一的,如果两个变量指向的值的id相同,就证明他们在内存中是同一个。
    s1 ='qbc'
    s2 ='abc'
    print(id(s1),id(s2))

    小数据池(缓存机制)
    小数据池的应用的数据类型: 整数,字符串,bool值

    小数据池,python对内存做的一个优化:
    他将 -5 ~256 的整数,以及一定规则的字符串,提前在内存中创建了池,容器,
    容器里固定的放了这些数。
    后续程序中,如果设置的变量指向的是小数据池的内容,那么就不会再内存中重新创建。

    小数据池的优点
    1,节省内存。
    2,提高性能与效率。
    i1 = 100
    i2 = 100

    一定规则的字符串?
    s1 = 'alex@'
    s2 = 'alex@'
    print(s1 is s2)


    代码块:
    python在同一个代码块中的变量,初始化对象的命令时,它会将变量与值的对应关系放到一个字典中,
    如果下面的代码在遇到初始化对象的命令,他会先从字典中寻找,如果存在相同的值,他会复用,指向的都是同一个内存地址。
    dic = {'name': alex@的内存地址,}
    python对于不同的代码块:初始化对象的命令时,他会从小数据池中寻找。
    name = 'alex@'
    name1 = 'alex@' # name1 = name

    小数据池与代码块的关系。
    同一个代码块:python在执行时,遇到了初始化对象命令,他会将这个变量名和数值放到一个字典中,
    再次遇到他会从这字典中寻找。
    不同代码块:python在执行时,直接从小数据池中寻找,满足条件id相同。

    同一个代码块
    i1 = 1000
    i2 = 1000
    print(id(i1),id(i2))

    def func():
    i1 = 1000
    print(id(i1))


    def func1():
    i2 = 1000
    print(id(i2))

    func1()
    func()

    编码二
    ascii: 字母,数字,特殊字符。
    A: 0000 0010
    B: 0000 0010
    unicode: 万国码,包含世界上所有的文字。
    创建之初:
    A :0000 0010 0000 0010
    中:0001 0010 0000 0010
    升级:
    A :0000 0010 0000 0010 0000 0010 0000 0010 32 位
    中:0001 0010 0000 0010 0000 0010 0000 0010
    浪费资源。
    对unicode 升级:utf-8
    A :0000 0010 8位
    欧:0000 0010 0000 0010 16位
    中:0000 0010 0000 0010 0000 0010 24位

    gb2312: 国标:字母,数字,特殊字符,中文。
    A :0000 0010 8位
    中:0000 0010 0000 0010 16位

    1, 编码之间能不能互相识别。 不能互相识别。
    2, 网络传输,或者硬盘存储的010101,必须是以非uniocde编码方式的01010101.

    大环境python3x:
    str:内存(内部)编码方式为Unicode。
    bytes:python的基础数据类型之一,他和str相当于双胞胎,str拥有的所有方法,bytes类型都适用。

    int
    tuple
    list
    dict
    set
    区别:
    英文字母:
    str:
    表现形式:s1 = 'alex'
    内部编码方式:unicode


    bytes:
    表现形式:b1 = b'alex'
    内部编码方式:非unicode

    中文:
    str:
    表现形式:s1 = '太白'
    内部编码方式:unicode


    bytes:
    表现形式:b1 = b'xe5xa4xaaxe7x99xbd'
    内部编码方式:非unicode

    b1 = b'alex'
    b2 = b1.upper()
    s1 = 'alex'
    print(b1, type(b1))
    print(b2, type(b2))
    print(s1, type(s1))

    s1 = '太白'
    b1 = s1.encode('utf-8')
    b2 = s1.encode('gbk')
    print(b1) # b'xe5xa4xaaxe7x99xbd'
    print(b2)

    str --- > bytes encode 编码
    s1 = 'alex'
    s2 = '太白'
    b1 = s1.encode('utf-8')
    print(b1)
    b2 = s2.encode('gbk')
    print(b2)

    bytes ---> str decode 解码
    b1 = b'xccxabxb0xd7' # gbk 的bytes
    s2 = b1.decode('gbk')
    print(s2)

    如何使用:
    你想将一部分内容(字符串)写入文件,或者通过网络socket传输,这样这部分内容(字符串)必须转化成bytes才可以进行。
    平时你代码中,使用字符串。
  • 相关阅读:
    高盛、沃尔玛 题做出来还挂了的吐槽
    amazon师兄debrief
    到所有人家距离之和最短的中点 296. Best Meeting Point
    问问题没人回答的情况怎么办终于有解了
    找名人 277. Find the Celebrity
    数组生存游戏 289. Game of Life
    547. Number of Provinces 省份数量
    428. Serialize and Deserialize Nary Tree 序列化、反序列化n叉树
    alias别名简介和使用
    面试官:线程池执行过程中遇到异常会发生什么,怎样处理? Vincent
  • 原文地址:https://www.cnblogs.com/qilin610/p/9465183.html
Copyright © 2020-2023  润新知