python编程的核心知识点总结

张开发
2026/6/24 2:16:08 15 分钟阅读
python编程的核心知识点总结
一、为什么提出python编程的核心是什么我想要Python实现这已经不是什么秘密了。WebAssembly它不仅会让Python进入浏览器而且事实是两者都是IOS和安卓支持将JavaScript作为应用程序的一部分运行它还可以让Python进入移动平台。这一切都让我兴奋。但是当想到创建Python的新实现这一艰巨任务时我的大脑也开始问到底是什么东西。是Python我们一起生活过CPython长期以来我怀疑我们大多数人只是认为“PythonCPython”。皮皮试着这么做兼容他们将实现CPython的实现细节。基本上据我所知Python的大多数实现都力求通过CPython的测试套件并尽可能与CPython兼容。这太令人望而生畏了。由CPython实现的Python是非常动态的并且暴露了许多只有在您使用解释器实现Python时才有意义的事情。例如PyPy有一个基线解释器他们使用JIT但是在Python中可以使用很多东西这些东西迫使PyPy关闭JIT并继续使用字节码。仅REPL本身就使事情变得非常动态因为您输入到REPL中的所有内容都是由解释器动态解析、编译和执行的。这让我思考了到底是什么是Python语言的核心是什么所有Python实现都需要覆盖哪些基线才能真正将自己称为Python的实现而人们仍然会认识到这一点或者从我的角度来看要将Python直接编译到WebAssembly并仍然被认为是Python实现还需要实现多少呢二、Python需要REPL真正让我开始思考这个问题的是当我开始思考如何将Python编译成WebAssembly时没有实现另一个解释器但实际上从Python源发出静态WebAssembly并且仍然合理地称之为“Python”。我知道的一件事是通过动态编译eval()或compile()很难做到WebAssembly安全模型在加载时验证模块。这意味着在其他代码的内存空间中不存在只运行任意代码的结构化结构这可能会使REPL的实现变得很棘手。但这让我想Python真的需要REPL不要误解我的意思它非常方便但是如果一个实现没有REPL它会不会不再成Python我认为没有REPL的Python仍然是Python它只是缺少一个(可能的键)特性。三、Python的哪些部分需要被视为“Python”你能活下去吗locals()能够任意地将所有定义的局部变量及其值收集到字典中是一件非常动态的事情。如果您是在一个整数(如CPython)中您只需从当前执行框架中收集一些内容就可以得到局部变量。但是在编译语言中这需要做更多的工作因为您必须知道何时收集所有这些信息因为不一定只是在调用时躺在那里。locals().或者其他人locals()本身再说一次这在CPython中并不是什么大问题因为builtins模块有一个__dict__您可以覆盖它它将简单地传播到任何未来的调用。但是在一种编译语言中做这种检测需要付出更多的努力这样的检查最终要花费性能。关于sys.settrace()它实际上会触发每个字节码的回调如果编译了代码这就不太起作用了。您可以通过检查在每一行之后是否设置了跟踪函数来伪造它但是当大多数时候没有设置这样的钩子时这看起来就有点麻烦了(不过在这种支持下编译可能是一个编译器标志)。那你觉得呢sys._getframe()编译后的语言不一定会直接访问执行框架所以您是否需要进行模拟呢由于任何函数都可以请求执行框架因此您需要随时准备按需提供执行帧。正如您所看到的Python中有很多东西使得编译变得困难(因此更强大到努特卡接受这个挑战)。但我敢打赌我上面提到的东西--你不会在99.9%的时间里使用它们所以如果一个实现忽略了它们它还能被认为是“Python”吗四、需要多少兼容性才能有用我对这个问题没有很好的答案。但它的答案决定了实现Python有多困难以及它与现有软件的兼容性。我要说的是我认为WebAssembly不需要支持大量的Python软件才有用。WebAssembly可以访问其他语言生态系统如Rust和JavaScript因此您需要用另一种语言实现一些您可以使用的其他语言的可能性肯定在零以上。我没有答案开发一个直接将Python代码转换为WebAssembly并为性能牺牲一些兼容性的编译器可能是有意义的。开发一个针对WebAssembly设计但与已有代码保持大量兼容性的解释器可能是有意义的。简单地支持RustPython在他们的WebAssembly的努力中。也许吧皮笛会把我们带到那里。我不认为任何这些可能性本质上都是错误的它很可能会归结到任何一个足以激发人们的兴趣看到它对他人有用的程度。

更多文章