现在是多元化编程,每一个程序员都需要使用多门编程语言,特别现在是 AI 时代,对于我们.Net 程序员来说,就需要经常同时使用 Python 和.Net。
下面一个开源库,方便我们来突破 Python 和.NET 的界限。
Python.NET 是一个开源项目(https://github.com/pythonnet/pythonnet),它允许 Python 代码与.NET Common Language Runtime(CLR)进行交互,为.NET 开发者提供了一个强大的应用脚本工具。
通过 Python.NET,Python 程序员可以轻松地调用.NET 类库,而.NET 开发者则能够将 Python 脚本嵌入到他们的应用程序中,实现更加灵活和高效的开发流程。
使用方法
一、Python 调用.Net
1、安装依赖库(前提已安装 Python 环境)
pip install pythonnet
2、使用 C#创建一个类库,项目名称为:Util。
namespace Util
{
public class MyClass
{
///
/// 数值相加
///
/// /// /// public int Add(int a, int b) { return a + b; } } }
3、Python 调用.Net 库
import clr
import sys
# 加载自定义程序集(假设程序集名为 Util.dll)
clr.AddReference('Util')
# 从程序集中导入命名空间(假设命名空间为 Util)
from Util import MyClass
# 创建 MyClass 的一个实例
my_instance = MyClass()
# 调用 MyClass 的一个方法(假设方法名为 MyMethod)
result = my_instance.Add(100, 200)
# 打印结果
print(result)
二、.Net 调用 Python
1、安装依赖库
Install-Package pythonnet
2、C#调用 Python 代码
// 引入 Python.Runtime 命名空间,这是 Python.NET 库的一部分,它提供了与 Python 互操作的功能。
using Python.Runtime;
// 设置 Python 解释器 DLL 的路径。这里指定了 Python 3.10 的安装路径下的 python310.dll。
// 注意:这个路径应该根据你的 Python 安装位置进行调整。
Runtime.PythonDLL = "D:\\Python310\\python310.dll";
// 初始化 Python 引擎。这一步是必需的,它负责启动 Python 解释器并准备环境。
PythonEngine.Initialize();
// 使用 Python 全局解释器锁(GIL)确保线程安全。
// Py.GIL()返回一个实现了 IDisposable 接口的 GIL 上下文,使用 using 语句可以确保在代码块执行完毕后正确释放 GIL。
using (Py.GIL())
{
// 动态导入 Python 的 numpy 模块。这里 np 变量将作为 numpy 模块的代理。
dynamic np = Py.Import("numpy");
// 调用 numpy 的 cos 函数计算 cos(π*2)的值,并打印结果。由于π在 numpy 中表示为 np.pi,所以这里传入 np.pi * 2。
// 注意:在 Python 中,cos(π*2)等于 cos(2π),其结果为 1.0(浮点数表示)。
Console.WriteLine(np.cos(np.pi * 2));
// 从 numpy 模块中动态获取 sin 函数,并将其赋值给 sin 变量。
// 这样,我们就可以直接通过 sin 变量调用 numpy 的 sin 函数了。
dynamic sin = np.sin;
// 调用 sin 函数计算 sin(5)的值,并打印结果。
Console.WriteLine(sin(5));
// 计算 cos(5) + sin(5)的值,并将结果转换为 double 类型,然后打印出来。
// 注意:这里使用了 C#的类型转换语法(double)来将 Python 的浮点数转换为 C#的 double 类型。
double c = (double)(np.cos(5) + sin(5));
Console.WriteLine(c);
}
© 版权声明
博主的文章没有高度、深度和广度,只是凑字数。利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的纯镀 24k 文章!如若有侵权,请联系博主删除。
喜欢就点个赞吧