前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2023年01月 .NET CORE工具案例-使用pythonnet实现C#和Python的融合调用

【愚公系列】2023年01月 .NET CORE工具案例-使用pythonnet实现C#和Python的融合调用

作者头像
愚公搬代码
发布2023-03-16 15:53:04
1.8K0
发布2023-03-16 15:53:04
举报
文章被收录于专栏:历史专栏

文章目录


前言

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包

代码语言:javascript
复制
import clr
from System import String
from System.Collections import *

2、加载.NET Framework程序集

代码语言:javascript
复制
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Form

3、导入.NET Core包

代码语言:javascript
复制
from pythonnet import load
load("coreclr")

import clr

2.在 .NET导入Python包

代码语言:javascript
复制
PythonEngine.Initialize();
using (Py.GIL())
{
    dynamic np = Py.Import("numpy");
    Console.WriteLine(np.cos(np.pi * 2));
}

二、C#和Python的相关案例

1.Python调用C#

1、安装包

代码语言:javascript
复制
pip install pythonnet

2、C# 代码

代码语言:javascript
复制
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 代码

代码语言:javascript
复制
# 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、安装包

代码语言:javascript
复制
pythonnet
在这里插入图片描述
在这里插入图片描述

2、C#代码

必须将python文件夹下的dll复制到debug文件夹下,如果是自己的pyd包需要将pyd文件也放到debug文件夹下。

代码语言:javascript
复制
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();
    }
}

输出

代码语言:javascript
复制
1.0
-0.958924274663
-0.6752620892
float64
int32
[  6.  10.  12.]
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023/01/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
  • 一、C#和Python的融合调用
    • 1.Python导入C#包
      • 2.在 .NET导入Python包
      • 二、C#和Python的相关案例
        • 1.Python调用C#
          • 2.C#调用Python
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档