c# python 相互调用_如何看待Python的性能?

点击上方“AITop100”,选择“星标”公众号

重磅干货,第一时间送达

5a4bc2ed0e5fba9a571b3e53220ecd19.png

3c80102e80ace967ba86d4eb81eecc8b.png 很多人的编程能力/很多业务的问题挑战,还不到考虑python性能的程度? 那就看看知乎上的大神怎么解释吧! find goo: python和java比,运行速度比java慢,java强大于改进n次的强大jre,但python在很多领域能调用很多现成的开源库,在数据分析中有优势,pyhton的代码比java要简洁,容易入门和使用。在优化的计算库帮助下,如numpy numba,pandas,scikit-learn,python的实际问题运算性能并不低于java。java主要是框架太多,相对复杂,java主要用于业务程序开发,符合软件工程理论,可伸缩性强,强类型有利于对程序的静态检查分析。java随着安卓,hadoop,spark的兴起,加入java语言的公司很多,性能也可以通过优化解决很多问题。很多服务器如ubuntu server,centos都默认支持python,而java虚拟机需要安装配置,python的安装使用也相对简单。python的库有开箱即用感,很多业务领域,你可能还在用oop写代码,考虑设计模式,用锄头挖沟时,而python调用挖掘机api已经炒菜完工开饭了,缺点是油耗比较大。 afecaff558641be04c54933e6f626632.png 5a8f004d6c27ac8bf9de6c9580cdddb3.png Python和c#相比,c#依赖强大的微软优化的.net虚拟机和强大vs ide,在windows平台下运行速度比java要快,但跨平台运行后如mono,速度就慢了,功能也不完全。c#的跨平台能力比不上python,c#比python要复杂,c#语法和java,c++借签,比较受编程人员喜好。mono的出现,unity3d用c#调用c++做游戏业务逻辑,可以在手机上流畅运行,体现了很多程序的性能在于良好的设计,可以把高性能的用c/c++写,用c#,java,python写容易变化的业务逻辑部分。c#在mon虚拟机下运行速度还可以,但linux控在服务器上有java,python,php,所以用mono做web比较小,从unity3d的成功来看,用c#做为业务脚本语言,用c++做库也能获取很高的性能。这是折中性能和开发速度矛盾的一种解决方案。很多复杂的业务语言用java,c#,在团队开发时易用性好,也说明了python的工程化比较差,对强类型的支持弱不适合静态分析,但python一但用强类型申明,那么是另一种java,也就不是快捷语言。在单纯的计算比较,各个虚拟机语言相差不多,其实除了现代很多业务系统瓶颈在io,在网络,在算法,在设计,你2秒运行1.2亿次,而没有数据库或缓存能做到2秒内记录完1.2亿条数据,都是1秒在1百万记录以下,如果走网络速度更慢,持续平均1秒能记录下几十万条数据顶天了,所以这些语言一直在等io完成任务。 python和go语言相比,go语言相对较新,go语言的库没有python的丰富,毕竟python发展了几十年,go语言最大的优点是协程,速度快,支持高并发,但任何支撑高并发的语言编程都不是一件易事,最大的缺点是,名称有google的go,所有很多其他的巨头公司本着竞争的观念对有类似商标的语言有抵制心理。而python是开源,用得公司特别多。go语言的语法如果能像c#,java类似,可能会发展得更好。很多语言为什么会用它,不在于语法,不在于性能,主要在于这个语言开发了什么成功的产品,另人会mock这个产品,用这个语言,Docker就是go语言开发的,适就于大规模分发容器。 python语言和c/c++相比,python开发速度比c/c++快,因为c/c++有指针,干什么之前,需要考虑好指针的技巧,指针弄不好,会造成内存泄露,一点内存泄露不要紧,但乘以时间乘数就会耗尽整个内存,因内存泄露造成的24h*365天服务器需要重启会造成实际经济损失,所以开发商业后台业务程序最好用无指针的java,php,python。但对用户来说python,java,c#,c/c++开发同样功能的程序,用户会选择c/c++,所以在软件业无数成功的标牌软件是c/c++,这是c/c++的成熟之处。c/c++主要是开发成本高,同样的程序可能python,c#一周,c++搞二个月很正常。但为了利益,花再多时间也有人干,如同现在一样有人用汇编写加密代码,用FPGA把程序做成芯片,追求的是极致的速度。c/c++的快是直接编译成二进制,无jit,vm,而python最快也只是调用c的扩展。开发成本也是很高的成本,高级的c++程序很贵,如在美国高级的c++程序员年薪在百万人民币以上,有时不是大应用时,用易于使用的语言,上高级点的电脑,上集群就可以了。如用python显卡来加速,买个显卡也就万元。c/c++适合精雕细琢,走精英路线,python适合快速开发,走大众路线,其实对于影响性能的部分可以结合使用,用python调用c/c++库。随着编译技术进步,电脑的计算力成本会随时间下降,计算力越来越强,最近的cpu多核主频高达5g,理论上比2.5g的cpu算力快一倍,用液氮超频可达6.7g,同样的核也比我电脑快了1.5倍(如果用高级c++语言程序员优化了1倍时间花费1人/年,显然超过了换计算机的钱),显卡在多核的支持下浮点运算能力也越来越高(可用NumbaPro,PyCUDA), HPC在云市场可以租用到,超级计算机也可以向有关组织租用机时测试,动态语言以其易用性开发成本低在很多领域可以取代高性能的编译语言,但极致的编译性能软件市场也是不断扩大的,很多行业算力跟不上,很多np-hard问题对算力需求不是线性增加能满足的,人们对性能的需要实际是越来越高,如世界竞争的超级计算机,比特币矿机,深度学习算法。谁都不可以取代谁,而是大家都结合发展了。用什么语言没有好坏之分,关键是在目标程序追求的是什么。 gaoquan yan: 性能不够 增加硬件,程序员出活的时间成本比机器成本贵多了。 hhdh: 我看了下3.6有很多性能优化的地方,估计以后Python也可能会向着性能优化发展。顺便其他答案都说了,找到性能差的地方就用C改写,不过我看到很多Python程序员最后都去写了Golang。 zhihu: 看你需要。可以针对性优化,也不费多少事。 CPU密集的就上C拓展。 IO密集的上uvloop。 Web服务之类的 pypy 挺好。 毕竟CPython没有JIT,性能相对来说欠缺。但我见过的Python项目,大多还没有大到需要上优化的地步。只是开发者本身太菜了而已。 zhihu2: 借用一句话:很多人的努力,还不到谈论天赋的程度。 同理:很多人的编程能力/很多业务的问题挑战,还不到考虑python性能的程度。 Alan: 在这个行业,相信大家不止一个人也不止一次的说过类似的话:"一个成熟的系统不会是由一门语言去包打天下的”。 还有就是python 在企业中可以作为主要使用语言,比如做web开发的公司,为什么不呢,真正涉及到密集运算的部分很少,我们可以用很多替代方案解决,例如用c重写那部分,用python粘合,或者是用其他语言重写,再提供service接口等等,那个不是要命的问题,业务复杂度和需求变更才是要命的,这个小时讨论,只有两个小时编码,1个小时测试,快速发布到线上所有环境让用户使用才是要命的问题,这个时候你跟我扯性能,那不是搞笑吗? 还有一点是大部分国内的企业用非python是因为能用python真正解决问题的程序员相比之下少一些,这个来自于我们内部的数据统计,我们是做智能招聘的,通过大把(千万级)的简历分析得到的结果。(不是那种学了一段时间python就妄下定义的人),市场的选择而已,并不能说明问题。 是的,我自己所在的公司就是用python做为主要开发语言,也包括科学计算,海量分析相关的东西,没见到他们工作时说python性能差,性能差的地方只占他们工作的百分之几,换个语言就绕过去了,当然你要说用python去写游戏客户端图像处理那部分那就真的蛋疼了。每种语言都有他合适的应用场景。 转载知乎地址: https://www.zhihu.com/question/40393531 99e53780e2f613cbd4a2b99dff1376c9.png

86652a909c18c320cb1b92f2d66f4241.png

最新热文荐读

视频| 机器学习从0到1(第1节:机器学习简介)

视频| 机器学习从0到1 (第2节: 入门计算机视觉)

视频| 机器学习从0到1(第3节:卷积神经网络)

视频| 机器学习从0到1 (第4节:石头剪刀布)完结篇

下载|《树莓派Python编程指南》

下载|《Python金融大数据分析》

下载|《Python性能分析与优化》

下载|《美团机器学习实践》

下载|《TensorFlow 2.0深度学习》

下载|《从Excel到Python-数据分析进阶指南》

资源|《量化投资以Python为工具》专业性极强的金融领域书籍

资源|《Python机器学习及实践-从零开始通往Kaggel竞赛之路》

实战|自然场景中文文字识别,身份证火车票都能识别

实战|那些年玩的QQ飞车,AI也学会了

觉得本文对你有帮助?请分享给更多人

4ce27dadc0e16b239f4c8966d90404ea.gif欢迎关注上方右侧我的腾讯视频号

介绍一下我的腾讯视频号以及我自己

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 调用 C# dll 库最简方法有以下两种: 1.使用Pythonnet库:Pythonnet是一个能够把 Python 和 .NET 程序集融合在一起的库,可以很方便地调用 C# dll 库。首先需要安装Pythonnet库,在Python中导入clr模块,然后使用clr.AddReference添加dll库的引用,最后就可以使用C# dll中的类和函数了。 示例代码: ```python import clr clr.AddReference("test.dll") # 添加dll引用 from test import Test # 导入C#类Test if __name__ == '__main__': t = Test() print(t.HelloWorld()) # 调用C#类Test中的HelloWorld方法 ``` 2.使用ctypes库:ctypes是Python的标准库之一,也可以用来调用C# dll库。可以使用LoadLibrary函数加载dll库,然后使用dll中的函数和类。 示例代码: ```python import ctypes # 加载dll库 test_dll = ctypes.WinDLL("test.dll") # 定义C#类Test中的HelloWorld函数 test_dll.Test_HelloWorld.restype = ctypes.c_char_p test_dll.Test_HelloWorld.argtypes = [] if __name__ == '__main__': print(test_dll.Test_HelloWorld().decode()) # 调用C# dll中的函数Test_HelloWorld ``` 需要注意的是,使用ctypes库调用C# dll库需要在C#中使用__declspec(dllexport)标记暴露函数和类,例如: ```csharp using System; using System.Runtime.InteropServices; namespace Test { public class Test { [DllImport("test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr Test_HelloWorld(); public string HelloWorld() { return Marshal.PtrToStringUni(Test_HelloWorld()); } } } ``` 以上就是Python 调用 C# dll 库最简方法的详细介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值