Knight_day6

  • 代码块

for.... if.... while....下是象征意义的代码块,不是python严格定义的

一个代码块为一个模块,一个函数(def),一个类(class),一个文件等。

交互模式下每行是一个代码块(可理解为每一行在一个文件中)

  • id,is,==

= 赋值

== 数值相同

id 内存地址(门牌号,唯一),指向id相同,在内存中是一个

Knight_day6

 

判断id相同 i1 is i2

判断值相同 i1 == i2 (is为True,==必为True,反之不一定)

 

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

python对内存做的优化,将-5~256整数,以及一定规则的字符串,提前在内存中创建了池(容器),容器内固定放了以上值。

目的:1.节省内存 2.提高性能与效率

应用的数据类型:整数,字符串,bool值

一定规则的字符串?:不是重点

问题:

s1 = 'alex@'
s2 = 'alex@'
print(s1 is s2)
#在交互模式下为False,在pycharm中为True

  涉及代码块:

    s1 = 'alex@'

    s2 = 'alex@'

    python对于同一个代码块的变量,初始化对象命令时,会将变量与值的对应关系放到一个字典中,dic = {'s1': alex@的内存地址},如果下面代码再次初始化对象命令,会先从字典中寻找,如果存在相同的值,会复用(s2 = s1),即指向同一内存地址。

    对于不同代码块,进行初始化对象命令,会从小数据池中寻找。

def func1():
    i1 = 100
    print(id(i1))
def func2():
    i2 = 100
    print(id(i2))
func1()
func2()

def func1():
    i1 = 1000
    print(id(i1))
def func2():
    i2 = 1000
    print(id(i2))
func1()
func2()
'''
1957215520
1957215520
1826416549616
1826415947472
'''

 

  • 编码

ACSⅡ:字母,数字,特殊字符。8位。

unicode:万国码,包含世界所有文字。

    创建初:16位

    升级:32位

对unicode升级:utf-8。A:8位

          欧:16位

          中:24位

gbk/gb2312:只含字母,数字,特殊字符,中文。A:8位

                      中:16位

1.编码间不能互相识别

2.网络传输或文件存储010101...必须使用非unicode编码

python3中:

  str:内存(内部)编码方式为unicode,其他都是utf-8。

  bytes:也是基础数据类型,和str相当于双胞胎,str所有方法bytes类型都适用。

  区别:

    str bytes
英文 表现形式 s1 = 'alex' b1 = b'alex'
内部编码 unicode 非unicode
中文 表现形式 s1 = '太白' b1 = b'十六进制表示'
内部编码 unicode 非unicode

  使用:想将一部分内容(字符串)写入文件或通过网络socket传输,必须转为bytes类型,平时代码中使用字符串。

  转化:str --> bytes:encode编码

      s1 = 'alex'

      b1 = s1.encode('编码类型如utf-8')

     bytes --> str:decode解码

      b2 = b'\xcc\xab\xb0\xd7' #gbk的bytes

      s2 = b1.decode('gbk')

上一篇:Java默认编码Unicode和ASCII、UTF-8等的区别


下一篇:strtok()函数介绍