【愚公系列】2023年01月 .NET CORE工具案例-使用pythonnet实现C#和Python的融合调用
【摘要】 前言Python.NET 是一个包,几乎给Python程序员 与 .NET 公共语言运行时 (CLR) 和 为 .NET 开发人员提供功能强大的应用程序脚本工具。它 允许 Python 代码与 CLR 交互,也可用于 将 Python 嵌入到 .NET 应用程序中。Python.NET网址:https://github.com/pythonnet/pythonnet 一、C#和Python...
前言
Python.NET 是一个包,几乎给Python程序员 与 .NET 公共语言运行时 (CLR) 和 为 .NET 开发人员提供功能强大的应用程序脚本工具。它 允许 Python 代码与 CLR 交互,也可用于 将 Python 嵌入到 .NET 应用程序中。
Python.NET网址:https://github.com/pythonnet/pythonnet
一、C#和Python的融合调用
1.Python导入C#包
1、导入.NET Framework包
import clr
from System import String
from System.Collections import *
2、加载.NET Framework程序集
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Form
3、导入.NET Core包
from pythonnet import load
load("coreclr")
import clr
2.在 .NET导入Python包
PythonEngine.Initialize();
using (Py.GIL())
{
dynamic np = Py.Import("numpy");
Console.WriteLine(np.cos(np.pi * 2));
}
二、C#和Python的相关案例
1.Python调用C#
1、安装包
pip install pythonnet
2、C# 代码
using System;
namespace TestDll
{
public class MyTest
{
public void Print()
{
Console.WriteLine("Hello world!!!");
}
public void Print(string msg)
{
Console.WriteLine($"Hello {msg}!!!");
}
public double Add(double x, double y)
{
return x + y;
}
}
}
3、Python 代码
# coding:utf-8
import clr
# 引用Dll,不需要添加后缀
clr.AddReference("TestDll")
# TestDll是命名空间,MyTest是命名空间里定义的类
from TestDll import MyTest
# 实例化类
instance = MyTest()
# 无输入及无返回
instance.Print()
# 有输入及无返回
instance.Print("qin")
# 有输入及输出
add_data = instance.Add(1, 1)
print(add_data)
2.C#调用Python
1、安装包
pythonnet
2、C#代码
必须将python文件夹下的dll复制到debug文件夹下,如果是自己的pyd包需要将pyd文件也放到debug文件夹下。
static void Main(string[] args)
{
PythonEngine.Initialize();
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 = (double)(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.]
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)