前言:
如何更好地进行python与.NET之间的交互式编程?在之前,我们常常使用IronPython,在.NET平台上使用python开发,但是IronPython只支持python2.7版本,而且不在维护,pythonnet提供了一个更好的解决方案,它提供了二者的交互,可以在编写python的时候与C#交互,调用C#,也可以在编写.NET的时候,将python代码嵌入在C#里面。
详细信息参考:
https://github.com/pythonnet/pythonnet
一、python中调用.NET代码
首先需要安装这个python库:
pip install pythonnet
通过python net库我们可以调用.NET的命名空间就像python里面的模块一样那样调用。
import clr
from System import String
from System.Collections import * # 这是C#的命名空间,就像python本身一样
加载.NET的程序集,需要用到clr的AddReference函数来实现
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Form
二、在.NET中调用python代码
举一个简单的例子
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();
/***Output:
-0.958924274663
-0.6752620892
float64
int32
[ 6. 10. 12.]
详细教程参考:
https://github.com/pythonnet/pythonnet/wiki
前言:如何更好地进行python与.NET之间的交互式编程?在之前,我们常常使用IronPython,在.NET平台上使用python开发,但是IronPython只支持python2.7版本,而且不在维护,pythonnet提供了一个更好的解决方案,它提供了二者的交互,可以在编写python的时候与C#交互,调用C#,也可以在编写.NET的时候,将python代码嵌入在C#里面。详细信息...
首先你需要安装 python.net 模块。你可以使用 pip install pythonnet 命令来安装该模块。
然后,在你的 Python 程序中导入 pythonnet 模块,就像这样:
import pythonnet
你可以使用 pythonnet.import_assembly 函数来加载 .NET 程序集,然后使用 pythonnet.CLRModule.GetAttr 函数来...
Python.NET (pythonnet) 是一个包,它使 Python 程序员可以与 Windows 上的 .NET 4.0+ 公共语言运行时 (CLR) 和 Linux 和 OSX 上的 Mono 运行时几乎无缝集成。Python.NET 为 .NET 开发人员提供了强大的应用程序脚本工具。使用此包,您可以编写 .NET 应用程序脚本或使用 Python 构建整个应用程序,使用以任何面向 CLR 的语言(C#、VB.NET、F#、C++/CLI)编写的 .NET 服务和组件。
请注意,此包.
环境:python3.8(截止20222/4 python3.10不支持pythonnet)
安装pythonnet:pip install pythonnet
import clr # 与其他模块不同此处不直接导入pythonnet 而是导入clr(python与c#交互核心)
dll_path = r'xxxxxx/xxxxx/TestPythonnnet.dll' # 为了方便理解这里给到dll所在的绝对路径且包含dll文件本身
clr.AddReference(dll_path) #加载.
PythonNet 是一个 Python 包,允许在 Python 中与 .NET 运行时环境无缝集成,Python 版本 2.7/3.5-3.7 都可以使用。本文以 Python 调用 .NET System.Windows.Forms 为例,演示 PythonNet 的使用方法。
PythonNet 支持 pip 方式安装:
pip install pythonnet
创建 WinFo...
使用的 pythonnet 为尚在测试的 3.0 版本。该版本直接舍弃了一大堆依赖,安装非常简单。
# 当前最新(截止至2022/3/29)的预发行版本
pip install pythonnet==3.0.0a2
3.0.0 版本不再限定某个 python 3.X 版本,而是全部 python 3.X 版本都可以直接安装。
因为自3.0.0版本开始,pythonnet 把对 C# 的依赖全都变成了动态依赖于系统的 Net库,而不是再封装到wheel里面。
简单的基于pythonnet 导入第三方库的DL
.NET 是一个广泛使用的软件开发平台,Python.NET 是一个使 .NET 应用程序能够使用 Python 语言的库。
要使用 Python.NET,需要先安装 .NET Framework 和 Python。然后,你可以使用 pip 来安装 Python.NET:
pip install pythonnet
安装完成后,你就可以在 .NET 程序中使用 Python 代码了。例如,你可以在 C# 中这样使用 Python 代码:
using Python.Runtime;
using (Py.GIL())
dynamic py = Py.Import("your_python_module");
int result = py.your_python_function(your_arguments);
你还可以使用 Python.NET 在 Python 中调用 .NET 代码,或者在 .NET 中调用 Python 模块。
希望这对你有帮助!
timeit函数负责返回一个wrapper,wrapper的参数要与原来的myfunc保持相同
这样一来,执行 myfunc=timeit(myfunc) myfunc完全等价于wrapper
wrapper函数负责添加额外功能
def wrapper(function):
start = time.clock()
function()
end =time.clock()
print(f'函数执行所花费的时间为:{end-start}')
return wrapper
myfunc=timeit(myfunc) #注意,这里与前面的 “myfunc=timeit”是有所区别的哦
myfunc() #还和原来调用myfunc()一样,但是达到了添加额外功能的效果
[/code]
Python高级编程——装饰器Decorator详解(上篇)(绝对是我见过最详细的的教程,没有之一哦)
豪放和雅约: