Python for .NET is a package that gives Python programmers nearly seamless integration with the .NET Common Language Runtime (CLR) and provides a powerful application scripting tool for .NET developers. It allows Python code to interact with the CLR, and may also be used to embed Python into a .NET application.
Python for .NET allows CLR namespaces to be treated essentially as Python packages.
importclrfromSystemimportStringfromSystem.Collectionsimport*To load an assembly, use the AddReference function in the clr module:
importclrclr.AddReference("System.Windows.Forms") fromSystem.Windows.FormsimportForm- All calls to python should be inside a
using (Py.GIL()){/* Your code here */}block. - Import python modules using
dynamic mod = Py.Import("mod"), then you can call functions as normal, egmod.func(args). - Use
mod.func(args, Py.kw("keywordargname", keywordargvalue))to apply keyword arguments. - All python objects should be declared as
dynamictype. - Mathematical operations involving python and literal/managed types must have the python object first, eg.
np.pi * 2works,2 * np.pidoesn't.
staticvoidMain(string[]args){using(Py.GIL()){dynamicnp=Py.Import("numpy");Console.WriteLine(np.cos(np.pi*2));dynamicsin=np.sin;Console.WriteLine(sin(5));doublec=np.cos(5)+sin(5);Console.WriteLine(c);/* this block is temporarily disabled due to regression #249 dynamic a = np.array(new List<float>{1, 2, 3 }); Console.WriteLine(a.dtype); dynamic b = np.array(new List<float>{6, 5, 4 }, Py.kw("dtype", np.int32)); Console.WriteLine(b.dtype); Console.WriteLine(a * b); */Console.ReadKey();}}Output:
1.0-0.958924274663-0.6752620892float64int32 [ 6.10.12.]