欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

day06

程序员文章站 2022-07-09 21:32:32
1、小知识点汇总 1 # 赋值后的地址是一样的 2 li1 = [1,2,3] 3 li2 = li1 4 print(li1 is li2)# is 用于判断li1的地址是否和li2的地址一样,结果输出为True 5 print(id(li1))# id()用于输出地址 6 print(id(li ......

1、小知识点汇总

1 # 赋值后的地址是一样的
2 li1 = [1,2,3]
3 li2 = li1
4 print(li1 is li2)# is 用于判断li1的地址是否和li2的地址一样,结果输出为true
5 print(id(li1))# id()用于输出地址
6 print(id(li2))
7 # 2440684855944
8 # 2440684855944

  在python3中,有小数据池的概念,凡是数字在-5到256之间,他们都共用一个地址,目的是为了节省空间,由于pycharm的机制原因,不能体现出这种变化,所以我在cmd中实现。

day06

2、编码讲解

  以下是各个编码对a和中的表示。注意以下二进制的表示都是随意设置,并无根据,只是为了方便做笔记。

  ascll码 

    a : 00000010  8位  一个字节

  unicode

    a : 00000000 00000001 00000010 00000100  32位  四个字节
    中: 00000000 00000001 00000010 00000110  32位  四个字节

  utf-8

     a : 00100000  8位  一个字节

    中: 00000001 00000010 00000110  24位  三个字节


  gbk

     a : 00000110  8位  一个字节
    中 : 00000010 00000110  16位  两个字节

  在python2和python3中:

    1,各个编码之间的二进制,是不能互相识别的,会产生乱码。
    2,文件的储存,传输,不能是unicode(只能是utf-8、utf-16、gbk、gb2312、ascll等)

  在python3中:

    str 在内存中是用unicode编码。python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分。文本总是unicode,由str类型表示,二进制数据则由bytes类型表示。

day06

  数据的存储和传输,只能由bytes类型进行。

  对于英文:
  str :表现形式:s = 'alex'
  编码方式: 010101010  unicode
  bytes :表现形式:s = b'alex'
  编码方式: 000101010  utf-8、gbk。。。。

1 s = 'alex'
2 s1 = b'alex'
3 print(s,type(s))
4 print(s1,type(s1))
5 # result:
6 # alex <class 'str'>
7 # b'alex' <class 'bytes'>

  对于中文:

  str :表现形式:s = '中国'

  编码方式: 010101010  unicode

  bytes :表现形式:s = b'\xe4\xb8\xad\xe5\x9b\xbd'    

1 s = '中国'
2 print(s,type(s))
3 b = bytes(s,encoding='utf-8')
4 print(b)

  可以看出这里是用utf-8编码,utf-8是三个字节,中国两个字就有六个字节,故表现形式里面就有了六个。

1 s = '中国'
2 print(s,type(s))
3 b = bytes(s,encoding='gbk')
4 print(b)

  在这里用的是gbk编码,故他的结果是四个:b'\xd6\xd0\xb9\xfa'

  编码方式: 000101010  utf-8 gbk。。。。