想要学习Python的同学,来看一下帮你快速了解什么是Python!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_35192370/article/details/82049598

大纲:

1:python 能用来做什么
2:python 的一些实现和各自的特点
3:python 为什么会比较慢

-------------------------------------------------------------------------- 万恶的分割线 ---------------------------------------------------------------------------

python 能用来做什么:
    DevOps(是一个可以高效交付的东西)、数据科学、Web 开发、安全领域都可以用Python

Python 都有哪些实现,并且他们各自的特点:

    Jython      -- >      

                    一个用Java实现的采用了JVM的实现,
                    所以使得和其他java程序共同工作很容易:无需其他工作,你就可导入任何Java类,在你的Jython程序中使用其他                        Java类。
    CPython(Cython) -- >    

                    最通用的。这是一个用C实现的,被认为是”默认“的实现。由C解释器执行,所以很容易为Python代码写C扩展。
                    对于代码中性能很重要的部分,如果变量大多是静态类型,可以考虑使用 Cython   。
    Brython     -- >     

                    JavaScript
    RubyPython     -- >     

                    Ruby
    IronPython    -- >    

                    是另一很流行的 Python 实现,完全用C#实现,针对.NET平台。她运行在可以叫做.NET虚拟机的平台上
    PyPy        -- >     

                    是一个用RPython写的解释器,可以 即时编译(JIT)
                    对于启动时间不重要,而代码可能享受到JIT的好处的应用,可以考虑使用 PyPy

    Python的各种实现在对待Python源码的时候所做的处理方式是完全不一样的。然后这些差异是很小的,由于这些实现都在不停     的发展改进中,
    随着时间的推移,这些差异会慢慢融合和兼容。

    
python 为什么会比较慢:
    1:他是GIL(全局解释器锁)
    2:解释语言
    3:动态类型语言
    
    名词解释:
    编程语言: 用来定义计算机程序的形式语言,向计算机发出指令。
    解释语言:程序不需要编译,程序在运行时才翻译成机器语言。

    编译器:

                    是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程                      序,速度很快;
    解释器:

                    是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.
    
    1: GIL:
                    Cpython 在创建变量时会分配内存,然后用一个计数器计算对该变量的引用次数。如果为 0  就可以释放掉。
                    但问题是:如果变量在多个线程中使用,这个时候就会有一个“全局解释器锁”控制线程执行,不管多少个线程,

                    解释器一次只能执行一个操作
    性能:
                    如果单线程,单解释器,没有任何影响,单如果用一个解释器(一个python进程)通过线程实现并发,

                    就会出现GIL竞争

    其他python?
    PyPy 的 GIL 比 CPython 快三倍以上
    Jython 没有GIL python 线程 由 Java 线程表示,所以能享受到虚拟机(JVM)内存管理的好处
    
    
    2:解释语言
                    大部分语言为编译型或解释型,如C/C++等为编译型,python为解释型语言,每执 行一次都要翻译一次。

                    因此效率比较低;
    
    3:动态类型语言
                    “静态类型”语言要求必须在变量定义时指定其类型,例如Java
                    动态类型语言中虽然有类型的概念,但变量的类型是动态的,例如H5 先var 一个变量。
                    那么它每次读取、写入或引用时都会检查类型,
                    比较并转换类型的代价很大,使得效率比较低。
                    另外Python的优化很困难。

    其他Python的语言很快的原因就是它们牺牲了便利性来交换性能。(时间换空间或者空间换时间)
    例如Cython:它通过结合C的静态类型和Python的方式,使得代码中的类型已知,从而优化代码,能够获得84倍的性能提升,
    但是就出现了如果想写出高效的代码,像一些复杂的逻辑就需要用 c 来实现;
    
    
JIT编译器想要干什么?
    它一种混合了解释器和编译器好处的技术。简单来讲,JIT就是想通过编译技术提升脚本解释器系统的速度。


单独说一下     PyPy:
    PyPy具有巨大的潜力,它与CPython高度兼容
    
    我们假设有一种实现叫做:RPython,然后分户来  PyPy(A) 和 PyPy(B)
    
    PyPy(A)是一个用RPython写的解释器,因此它能加载用户的Python代码并将它编译。但是这个用RPython写的解释器本身         (即 PyPy(A))要能运行,就必须要被另外一个Python实现去解释
    我们可以直接用CPython去运行这个解释器。但是这个还不够快    怎么办?        
    取而代之,我们使用了PyPy(B) 去编译这个PyPy(A)的解释器,生成其他平台(比如C, JVM或CLI)代码在我们的机器上运           行,并且还加入了JIT特性。
    
    总的来说一下就是:
    PyPy动态的将JIT加入一个解释器,生成它自己编译器!
    也就是说:
    我们在编译一个解释器,并同时加入了另外一个单独的编译器到里面。

猜你喜欢

转载自blog.csdn.net/baidu_35192370/article/details/82049598
今日推荐