全国服务热线:400-035-8011

位置:海口达内IT教育培训机构 > 学校动态 > Python究竟是什么

Python究竟是什么

来源:海口达内IT教育培训机构 时间:2021/9/22 15:07:37

  “Python究竟是什么?”

      我们使用CPython已经很长时间了,以至于我怀疑我们大多数人都认为“ Python == CPython”。PyPy试图将兼容做到,所以他们打算实现CPython的实现细节。

  基本上,我所知道的大多数Python实现都会为通过CPython的测试套件而努力,并尽可能与CPython兼容。这就有点可怕了。

  CPython实现的Python非常动态,它公开了许多东西,只有当你以某种方式使用解释器实现Python才有意义。


Python究竟是什么


  例如,PyPy有一个基本的解释器使用JIT,但是你可以通过Python中的很多东西来迫使PyPy关闭JIT并坚持使用字节码。

  仅凭REPL就让Python变得十分动态,因为输入到REPL的所有内容都会由解释器动态地解析、编译和执行。因此我开始思考:Python到底是什么的问题?

  这门语言的核心究竟是什么?究竟Python实现需要覆盖到哪些基本功能,才能成为人们心目中认可的Python实现?还有以我来看,将Python直接编译成WebAssembly的实现需要付出多少代价?

  Python是否需要REPL?

  我真正开始思考这个问题是当我开始思考将Python编译成WebAssembly都需要什么的时候。这并不是要实现另一个解释器,而是从Python源代码产生静态的WebAssembly,并且它依然可以称为“Python”。

  我知道的,通过eva()或compile()进行动态编译可能不容易实现,因为WebAssembly的安全模型会在加载时验证模块。

  这意味着没有办法在其他代码的内存空间内运行任意代码,这可能会加剧实现REPL的难度。但这让我思考:Python真的需要REPL吗?

  别误会我的意思,它非常方便,但是我的意思是,如果某个实现不包含REPL,那么它还是Python吗?我认为无REPL的Python仍然是Python,只是缺少(可能是关键的)功能。

  这不禁让我思考必须将Python的哪些部分视为“ Python”的想法。没有locals()行不行?能够将定义的所有局部变量及其值都收集到一个字典中,这是非常动态的东西。

  如果你使用像CPython这种解释器,那么只需要从当前的执行帧里取一些东西就能获得locals。但在编译语言中,实现这一点需要大量工作,因为你必须知道应当何时收集这些信息,

  因为调用locals()的时候并不一定所有信息都存在。如果有人重载了locals()怎么办?同样,在CPython中这也不是什么问题,因为builtins模块有一个__dict__属性,只需要重载它,

  就会向下传递到以后的调用中。但在编译语言中,做类似的检测需要大量的工作,终会影响性能。

领取试听课
每天限量名额,先到先得

尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/3843/news/413132/违者必究! 以上就是海口达内IT教育培训机构 小编为您整理 Python究竟是什么的全部内容。

温馨提示:提交留言后老师会第一时间与您联系!热线电话:400-035-8011