python基础之认知及编码

一、python与其它语言对比


1.1 其它语言原理:

  C 和 Python、Java、C#等

         C语言: 代码编译后得到的是机器码 ,机器码在处理器上直接执行,每一条指令控制CPU工作,速度快

    其他语言: 代码编译得到 字节码 ,虚拟机执行字节码并转换成机器码再后在处理器上执行

  Python 和 C  Python这门语言是由C开发而来

    对于使用:Python的类库齐全并且使用简洁,如果要实现同样的功能,Python 10行代码可以解决,C可能就需要100行甚至更多.
    对于速度:Python的运行速度相较与C,绝逼是慢了

  Python 和 Java、C#等

    对于使用:Linux原装Python,其他语言没有;以上几门语言都有非常丰富的类库支持
    对于速度:Python在速度上可能稍显逊色

  所以,Python和其他语言没有什么本质区别

  python种类:Cpython   Jyhton   PyPy

 

二、python文件运行过程


 

2.1.安装

  windows:下载python解释器,https://www.python.org/downloads/,安装后加环境变量r

   linux:原装的,可用yum升级到2.7,需要安装gcc用于编码py文件的源码

     

2.2 过程

  编码:python2.7默认gcc编码方法是ASCII,python3.X默认编码方法是万国码unicode

  .py文件-------python解释器(词法分析-语法分析-编码-状态)-----返回字节码编译成能显示的语言

2.3 详解编码过程

    注:以下的转化只能是字符串与bytes相互转化等,python中的其它数据类型int 等需要转化成str后再与bytes转化

  明文(.py里写的内容)-----程序运行被python解释存在内存存为unicode值----utf8/GDK解码为bytes---二进制到cpu上运行

  unicode方式编码的值:unicode值,由utf8编码成的值:bytes值

  python2.x编码:

    (1)在python2里有一个中文文件test如下

       f = open('test','rb')

      print(f.read())//会报错,python默认是ASCII编码,里面的中文编码不了,需要用万国码(unicode/utf8等来编码,所以文件里的所有数据类型都相同编码方式来编码的)

          f = open('test','rb',encoding='utf8') //打开正常,能全部备utf8编码成bytes字节

    (2)对python2来说,编译到内存上的只有二种数据类型:str类型与unicode类型,对应内存里存的值是bytes与unicode值

1.类型str存的是字节(bytes)             
                    #coding:utf-8
                    //这是一个字符,这是用utf8编码的,中文用utf8编码成3个字节,英文是一个字节,这是utf8给这个变为二进制的格式     
                    s='丹丹hello'
                     //查看s存在内存是什么样的?
                     print repr(s)
                         // \xe8\xa2\x81\xe6\xb5\xa9hello(这是用utf8来进行编码的,这里面有中文)                                
                     print len(s)//11个字节来存的
                  print type(s)//这个s存的是字节,但它的类型是str

               2.类型unicode存的是unicode(所以在Py2中unicode是一个数据类型也是编码)
                    s=u'丹丹hello'//改为unicode类型
                    print repr(s)//u'\8881\u6d69hello'这是用unicode来进行编码的,这个编码的是世界唯一,而对于utf8
                    print type(s)--unicode  

3.注:总共存在内存与磁盘里的字节码有二种,字节bytes与unicode二种码
py3后统一只有一种,写的代码存在内存默认bytes与unicode,比如字符类型:'我'--自动存在起来的是unicode的值\u82d1\u660a运行时会变为机器码二进制的
网络传输的字节是二进制数据,代码运行---自动转化存内存为字节码(我(明文)-\u82d1\u660a(存,这里是unicode编码,是字节码与二进制的关系)--网卡转为十六进制字节(二进制(字节))传输---目标设备二进制转成字节码---显示为明文数据)
若收到的数据为字节码数据要进行转码才可以显示为明文数据,所以若编码确定后,二进制 字节码与明文是一一对应的关系
注2:网络传输的字节如何解释:
             是多字节一起传过来如:0x01 0x03 0x00 0x00 0x00 0x2B 0x05 0xD5,共8个字节,第一个字节表附加地址,第二个字节表功能码,第三四字节组成起始地址
如网络传的抓包:以下都为十六进制机器码,都是一个字节一个字节组成的,一个字节共8个bit, 9c是一个字节,有固定的字节组成方式,比如前7个字节代码包头

                             9c 3a 9a ef 31 e7 a4 b1 c1 68 f1 50 08 00 45 00
                             00 28 e8 9f 40 00 80 06 00 00 ac 10 1c 78 b4 65


            字节码是一种中间状态(中间码)的二进制代码(文件)字节码(Bytecode)是一种包含执行程序、由一序列 op 代码/数据对 组成的二进制文件字节码是一种中间码
它比机器码更抽象,需要直译器转译后才能成为机器码的中间代码。

如上流程:Unicode  ASCII   UTF-8都是一种编码,其中ASCII无法编码中文件,所以我国一般用的是万国码Unicode

                  

 

 

协议认识:TCP/IP不是一个协议,而是一个协议族的统称。里面包括IP协议、IMCP协议、TCP协议。 查看:https://zhuanlan.zhihu.com/p/493493428  

抓包分析:抓包里tcp流包里有以太网帧、IP帧、tcp帧(其中以太网帧是从目的地址开始,目的地址是下一跳的mac地址),抓http包里有以太网帧、ip帧、tcp帧与http帧

                      

          1.以太网的字节:

                        目的地址:下一跳的mac地址

                        源地址:自己的mac地址

                         类型为:ipv4版本/ipcv6等

           

        2. IP协议:

     

 

 

         3.tcp协议传输过程的流程:

                如下:TCP头共20个字节,前二个字节为源端口号,3-4字节为目标端口,5-8字节为顺序号,9-12为确认号,13-14:头部长度,保留位及URG/ACK/PSH/RST/SYN/FIN6个bit,15-16字节表窗口大小

                           17-18  19-20字节如下,数据里包含四层协议的包头数据等。

               

 

   4.http协议报文格式:

               

     

 

 

              

 

    

               

 

 

  (3)python2.x与python3.x对比

         1.过程

          

       2.实例

                         python2中:str类型 ‘hello’----默认存储为bytes类型,u'hello'--存储为unicode码

                         python3中:str类型 ‘hello’----默认存储为unicode码,b'hello'--存储为bytes类型

       

         3.总结

         

     

2.4 编码拾遗

    数据存磁盘如何存?运行是如何运行的?

      只要运行程序,就是从磁盘移到内存,这不是解释器做的,是操作系统拿的,直接把磁盘存的字节码复到内存里

      python3解释器就来读内存的字节码文件去执行,由于CPU执行的是01010,它的上一层必须是unicode,所以这个字节码由解释器先转成unicode才能执行 

posted @ 2021-01-21 11:18  xiong_Dana  阅读(76)  评论(0编辑  收藏  举报