Python for .NET 是一个包,它可以让 Python 程序员几乎无缝集成 .NET 公共语言 运行时 (CLR),并为 .NET 开发者提供一个功能强大的应用程序脚本工具。它允许 Python 代码与 CLR 交互,也可以用于将 Python 嵌入到 .NET 应用程序中。
在 Python 中调用 .NET 代码
Python for .NET 允许将 CLR 命名空间当作真正的 Python 包。
import clr from System import String from System.Collections import *
要加载程序集,请使用 clr 模块中的 AddReference 函数:
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Form
在 .NET 中嵌入 Python
- 所有对 python 的调用应该被包含在一个
using (Py.GIL()) {/* Your code here */}块中。 - 使用
dynamic mod = Py.Import("mod")导入 python 模块,然后你就可以 像平常一样调用函数,例如mod.func(args)。 - 使用
mod.func(args, Py.kw("keywordargname", keywordargvalue))或mod.func(args, keywordargname: keywordargvalue)来应用关键字参数。 - 所有 python 对象都应该被声明为
dynamic类型。 - 涉及 python 和字面值/托管类型的数学操作必须先使用 python 对象,例如,
np.pi * 2有效,2 * np.pi不行。
示例
static void Main(string[] args) { using (Py.GIL()) { dynamic np = Py.Import("numpy"); Console.WriteLine(np.cos(np.pi * 2)); dynamic sin = np.sin; Console.WriteLine(sin(5)); double c = np.cos(5) + sin(5); Console.WriteLine(c); dynamic a = np.array(new List<float> { 1, 2, 3 }); Console.WriteLine(a.dtype); dynamic b = np.array(new List<float> { 6, 5, 4 }, dtype: np.int32); Console.WriteLine(b.dtype); Console.WriteLine(a * b); Console.ReadKey(); } }
输出:
1.0 -0.958924274663 -0.6752620892 float64 int32 [ 6. 10. 12.]
关于安装、常见问题、故障排除、调试和使用 pythonnet 项目的信息,可以在 Wiki 中找到: