当前位置: 首页 > news >正文

看到网站的第一印象谷歌seo查询

看到网站的第一印象,谷歌seo查询,找人做个网站需要多少钱,营销咨询报告C#/.net程序调用python C#的优势在于window下的开发#xff0c;不仅功能强大而且开发周期短。而python则有众多的第三方库#xff0c;可以避免自己造轮子#xff0c;利用C#来做界面#xff0c;而具体实现使用python来实现可以大大提高开发效率。本文介绍如何使用pythonnet…C#/.net程序调用python C#的优势在于window下的开发不仅功能强大而且开发周期短。而python则有众多的第三方库可以避免自己造轮子利用C#来做界面而具体实现使用python来实现可以大大提高开发效率。本文介绍如何使用pythonnet来执行python脚本使用pythonnet既可以具有较高的交互性又可以使用第三方python库同时可以将程序需要的python环境及第三方库打包到软件中避免用户进行python的环境配置。 C#调用python的常见方法 调用python常见的方法有4种 方式优点缺点使用IronPython无需安装python运行环境交互性强C#和python无缝连接某些python第三方库不支持如numpy使用C调用Python然后将C程序做成动态链接库交互性较强需要用户配置Python环境实现方式复杂利用C#命令行调用py文件执行速度快需要用户配置Python环境交互性差将python文件打包成exe进行调用无需安装python运行环境执行速度慢传递数据复杂交互性差 可以看出4种方式均有限制很难同时满足交互性强、可调用第三方python库、无需用户配置Python环境要求而这几项要求恰恰是一款成熟软件所必须的。而使用pythonnet库可满足以上三点要求。 本文均在.net 6环境下测试 使用pythonnet Nuget安装pythonnet 设置Runtime.PythonDLL属性即pythonxx.dll路径xx为版本号 设置PythonEngine.PythonHome即python.exe所在路径 设置PythonEngine.PythonPathpython脚本所在目录可以放置多个路径以分号隔开但是pathToVirtualEnv\Lib\site-packages和pathToVirtualEnv\Lib应放在最后 调用PythonEngine.Initialize(); string pathToVirtualEnv .\envs\\pythonnetTest; Runtime.PythonDLL Path.Combine(pathToVirtualEnv, python39.dll); PythonEngine.PythonHome Path.Combine(pathToVirtualEnv, python.exe); PythonEngine.PythonPath ${pathToVirtualEnv}\\Lib\\site-packages;{pathToVirtualEnv}\\Lib; PythonEngine.Initialize(); //调用无参无返回值方法 using (Py.GIL()) //执行python的调用应该放在using (Py.GIL())块内 {//python对象应声明为dynamic类型dynamic np Py.Import(test);np.hello(); } //调用有参有返回值方法 using (Py.GIL()) {dynamic np Py.Import(test);int r np.add(1, 2);Console.WriteLine($计算结果{r}); }python文件必须放在PythonEngine.PythonPath设定的目录下 def hello():print(hello)def add(a,b):return ab嵌入Python环境及使用第三方库 程序中包含Python脚本所需要的所有环境以及第三方库可以免去用户的自定义配置。本文使用Anaconda来构建专用的虚拟环境。 创建专用虚拟环境windows下首先切换到要建立虚拟环境的根目录下执行conda create --prefixF:\condaenv\env_name python3.7 路径及python版本根据需要自定义。 使用Anaconda Prompt激活虚拟环境conda activate F:\condaenv\env_name 本次测试第三方库Numpy(如果需要其他库安装方法相同)安装Numpypip install numpy string pathToVirtualEnv .\\envs\\pythonnetTest; Runtime.PythonDLL Path.Combine(pathToVirtualEnv, python39.dll); PythonEngine.PythonHome Path.Combine(pathToVirtualEnv, python.exe); PythonEngine.PythonPath ${pathToVirtualEnv}\\Lib\\site-packages;{pathToVirtualEnv}\\Lib; 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 Listfloat { 1, 2, 3 });Console.WriteLine(a.dtype);dynamic b np.array(new Listfloat { 6, 5, 4 }, dtype: np.int32);Console.WriteLine(b.dtype);Console.WriteLine(a * b);Console.ReadKey(); }注意C#和python对象进行数学运算时必须将Python对象放到前面例如np.pi*2不能是2*np.pi 传递对象 可以将C#对象传递到python中 在C#中定义对象 public class Person {public Person(string firstName, string lastName){FirstName firstName;LastName lastName;}public string FirstName { get; set; }public string LastName { get; set; } }string pathToVirtualEnv .\\envs\\pythonnetTest; Runtime.PythonDLL Path.Combine(pathToVirtualEnv, python39.dll); PythonEngine.PythonHome Path.Combine(pathToVirtualEnv, python.exe); PythonEngine.PythonPath ${pathToVirtualEnv}\\Lib\\site-packages;{pathToVirtualEnv}\\Lib; PythonEngine.Initialize(); //将C#中定义的类型传入python using (Py.GIL()) {Person p new Person(John, Smith);PyObject pyPerson p.ToPython();string r1 test.FullName(pyPerson);Console.WriteLine($全名{r1}); }python脚本 def FullName(p):return p.FirstNamep.LastName调用pyd文件 pyd文件主要有以下2点作用 安全性更高通过pyd生成的文件已变成了dll文件无法查看源码编译成pyd后性能会有提升 将.py文件编译成pyd文件步骤如下 pip install cython在.py文件目录下创建setup.py文件 from distutils.core import setup from Cython.Build import cythonizesetup( name testName, ext_modules cythonize(test.py), #将test.py文件编译成pyd )执行编译命令 python setup.py build_ext --inplace 最后生成的pyd文件一般是testcpython版本-平台为文件名可以重命名为test名称也可以不管使用时仍然可以按test调用。 调动pyd文件和调用py文件相同但是执行效率大大增强下文会对执行速度进行对比。 执行速度对比 在test.py中定义一个耗时函数 import timedef Count():start time.perf_counter()sum 0for i in range(10000):for j in range(10000):sum sum i jprint(sum , sum)end time.perf_counter()runTime end - startrunTime_ms runTime * 1000print(运行时间, runTime, 秒)直接执行test.py脚本运行结果如下 在C#中调用Conut()函数 //运行时间测试 Console.WriteLine(C#开始计时); Stopwatch stopWatch new Stopwatch(); stopWatch.Start(); test.Count(); stopWatch.Stop(); Console.WriteLine($C#计时结束{stopWatch.ElapsedMilliseconds});执行结果如下 可以看到使用pythonnet调用python脚本会有一定的性能损失不过在对性能要求不是十分高的条件下是可以接受的。 执行test.pyd文件运行结果如下 从结果可以看出调用pyd比原生的py文件执行还要快所以可以使用pythonnet来执行pyd文件即实现代码保护又提升了执行效率。
http://www.w-s-a.com/news/503580/

相关文章:

  • 泰安高级网站建设推广wordpress教程 好看
  • 我自己的网站怎么做关键词优化泰安网站建设dxkjw
  • 平面设计做画册用网站泰州seo平台
  • 申请一个域名后怎么做网站evernote wordpress
  • 网站左侧导航栏设计网站开发后台数据怎么来
  • 临西做网站报价网站建设需要写语句吗
  • 建设网站网站首页购物网站开发代码
  • 淘宝客怎么建立网站网站360优化
  • 安徽建海建设工程有限公司网站网站空间和域名价格
  • 农产品网站建设策划哪里有做枪网站的
  • 更改各网站企业信息怎么做张家港企业网站制作
  • 郑州网站建设咨询银川做网站哪家好
  • 微信网站 微信支付合肥seo排名收费
  • 织梦做的网站如何上线广东省广州市番禺区南村镇
  • 网站设计的导航栏怎么做太原有网站工程公司吗
  • 苏州虎丘区建设局网站如何在一个数据库做两个网站
  • 淘宝天猫优惠券网站建设费用腾讯邮箱企业邮箱登录
  • 深圳福田做网站公司海航科技网站建设
  • 网站降权查询wordpress更换文章背景色
  • 大型电商网站开发金融企业网站建设公司
  • 成都营销型网站建设价格化妆品品牌推广方案
  • 深圳公司手机网站制作苏州网站推广哪家好
  • 网站建设开发方式包括购买学校网站建设费计入什么科目
  • 做简单网站的框架图中小微企业查询平台
  • 哪些网站可以免费做产品推广建设建设部网站
  • 网站开发销售怎么做django做网站
  • 淘宝客网站做百度竞价万网域名怎么绑定网站
  • 建设网站找哪个公司北京知名大公司有哪些
  • 专业彩票网站开发网站流量在哪设置
  • 网站建设对应的岗位榆林做网站公司