Python集成
在Mojo中使用你熟悉和喜欢的Python模块非常简单。你可以将任何Python模块导入到你的Mojo程序中,并从Mojo类型创建Python类型。
导入Python模块
要在Mojo中导入一个Python模块,只需使用模块名调用Python.import_module()
函数:
from python import Python
let np = Python.import_module("numpy")
array = np.array([1, 2, 3])
print(array)
[1 2 3]
是的,这样可以导入Python的NumPy模块,并且你可以导入任何其他Python模块。
目前,你无法单独导入成员(例如单个Python类或函数)——你必须导入整个Python模块,然后通过模块名称访问成员。
Python中的Mojo类型
Mojo的基本类型会隐式转换为Python对象。目前我们支持列表、元组、整数、浮点数、布尔值和字符串。
例如,给定以下打印Python类型的Python函数:
%%python
def type_printer(my_list, my_tuple, my_int, my_string, my_float):
print(type(my_list))
print(type(my_tuple))
print(type(my_int))
print(type(my_string))
print(type(my_float))
你可以毫无问题地将Mojo类型传递给Python函数:
type_printer([0, 3], (False, True), 4, "orange", 3.4)
请注意,在Jupyter笔记本中,上面声明的Python函数会自动对后续代码单元格中的任何Mojo代码可用。
Mojo还没有一个标准的字典类型,所以目前还无法从Mojo字典创建Python字典。但是你可以在Mojo中使用Python字典!要创建一个Python字典,请使用dict
方法:
from python import Python
from python.object import PythonObject
var dictionary = Python.dict()
dictionary["fruit"] = "apple"
dictionary["starch"] = "potato"
var keys: PythonObject = ["fruit", "starch", "protein"]
var N: Int = keys.__len__().__index__()
print(N, "items")
for i in range(N):
if Python.is_type(dictionary.get(keys[i]), Python.none()):
print(keys[i], "is not in dictionary")
else:
print(keys[i], "is included")
3 items
fruit is included
starch is included
protein is not in dictionary
导入本地Python模块
如果你有一些本地的Python代码想要在Mojo中使用,只需将目录添加到Python路径中,然后导入模块即可。
例如,假设你有一个名为mypython.py
的Python文件:
import numpy as np
def my_algorithm(a, b):
array_a = np.random.rand(a, a)
return array_a + b
以下是如何在Mojo文件中导入并使用它:
from python import Python
Python.add_to_path("path/to/module")
let mypython = Python.import_module("mypython")
let c = mypython.my_algorithm(2, 3)
print(c)
在Mojo中使用Python时不需要担心内存管理问题。一切都可以正常工作,因为Mojo从一开始就是为Python设计的。