Python for .NET 是一个包,它可以让 Python 程序员几乎无缝集成 .NET 公共语言 运行时 (CLR),并为 .NET 开发者提供一个功能强大的应用程序脚本工具。它允许 Python 代码与 CLR 交互,也可以用于将 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
- 所有对 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 中找到: