索尼ier m9搭配mojo
Mojo的长远愿景是成为Python的超集,意在兼容现有Python程序,让开发者无需更改即可用Mojo编译执行。这对广大Python开发者而言无疑是个激动人心的消息,因为他们可以直接利用现有的Python生态。目前Mojo仍处在早期开发阶段,许多Python特性尚未实现,且尚未形成自己的生态。
为此,Mojo提供了一种导入Python模块并与之交互的机制。这些Python代码是使用标准的CPython解释器运行的,因此现有的Python代码无需任何改动。例如,可以导入Python中常用的numpy包,并使用其各项功能。
在此过程中,有几个关键点需要注意:
1. 当前不支持导入独立的成员,例如包里的一个类或方法。只能导入整个Python包,然后通过包名访问其中的成员。
2. Mojo目前不支持顶层代码,import_module()必须在函数中调用。这意味着在多个函数中使用Python代码时,需要多次导入或在函数间传递module引用。尽管如此,多次导入一个module并不会多次调用包的初始化逻辑,因此不会有明显的性能损失。
3. import_module()可能会抛出异常(如包不存在)。必须在代码中处理这些异常。异常处理机制与Python一致,采用try/except/finally结构。
4. 除了导入Python的包外,也可以通过import_module()导入本地Python代码,但需要先用Python.add_to_path()增加module的路径。
5. Mojo SDK依赖于已安装的Python环境,通过对接CPython的动态库(.so或.dylib)来使用CPython解释器。
至于是否可以从Python中调用Mojo代码,答案目前是否定的。在某些情况下,如框架使用回调函数时,如果用户使用Python框架并希望用Mojo编写回调函数,可能会有些不便。虽然Mojo提出了在某些情况下驱动事件循环的方案,但并非所有需求都能通过这种方式解决。我们期待未来能有更好的解决方案。
Mojo的基础类型会隐式转换为Python类型。它支持List、Tuple、Integer、Float、Boolean和String等类型。例如,如果一个Python文件定义了打印Python值类型的函数,我们可以通过Mojo脚本轻松调用它。在Mojo中也可以使用Python的类型,如字典等。当在Mojo代码中使用Python对象时,Mojo会在对象外增加一个PythonObject包装器,该包装器提供了许多常见的双重下划线方法(如__getitem__()和__getattr__()),并将它们传递到基础的Python对象。如果创建的Python类型在Mojo中没有对应的类型,可以使用Python.evaluate()进行处理。