![](/img/trans.png)
[英]Which is a better extension language for speed optimization for python c or c++
[英]which is a better language (C++ or Python) for complex problem solving exercises (ex. Graphs)?
我正在努力研究一些问题和算法。 我知道C ++,但是一位朋友告诉我,如果用Python完成它会更好。因为开发 速度会快得多 ,花在编程细节上的时间也会少,实际上并没有任何解决方案。
编辑2 :我打算使用谷歌代码中的python-graph lib,如果您使用过,请提供示例代码。
编辑1 : 更快 - 更少的时间和更少的工作来编写解决方案
谢谢大家的帮助 !
我认为你正在寻找Python,因为你可以:
但更具体地......
better
表示开发速度 ,那么选择Python 。 better
意思是纯粹的执行速度 ,那么选择C ++ 。 您应该专注于可用的库 ,而不是专注于语言。
当C ++和Python中已经有很多(读取,“太多”)可用时,你不应该编写自己的图形库。 [Stack Overflow有一个Python Graph包列表,其中包含您应该查看的建议 。 我没有找到与C ++相同的问题。 你可以开始一个。]此外,除非这是一个学术练习或研究真正新颖的图形算法,你应该浏览可用的库,看看它们是否已经实现了你感兴趣的那些算法。
使用库可以减轻Python更高级语言的使用,因为您不会使用原始C ++ 本身 ,而是使用C ++库。 由于Python语言具有非常小的核心,因此它很容易学习,但是,它仍然需要时间。 如果您选择Python路线,那么在学习库的过程中需要考虑额外的时间因素,因此请务必在决策中权衡这一点。
因此,鉴于您已经了解C ++,您最终可能会发现使用C ++进行开发的速度更快,因为您只需要花费必要的时间来学习库,而不是库和新的 - 虽然易于学习的语言。
有点主观,但我投票支持python,因为它有很好的库,并且提取了许多你在使用c ++时必须要考虑的低级“细节”......
我用C ++在大学里完成了所有算法,因为我知道它。
如果我不得不同时学习一门语言,我最有可能选择Python。
我的印象是它真的取决于你的意思更快 。
开发更快:go python。 更快运行:去C ++。
但是python可以使用很多外部C库,因此处理时间的差异可能不相关,具体取决于实现的类型。
在我的大学,“算法和数据结构”课程中的500名学生可以选择他们想要的语言。
Python是迄今为止最受欢迎的选择,我个人很高兴我也选择了它,即使我已经知道C ++。
同意你的朋友 - 使用Python并将它们放在一个单元测试框架中。
我和科学家一起工作了很多年,他们用Python做了很多算法工作。
下面的例子显示了典型的测试(import语句用于测试的东西),有一些细节可能会为你节省一些时间。
保存和恢复sys.path的业务是让您可以将所有测试放在src目录旁边的目录中,而无需将源安装到主Python模块中。
编写此测试脚本,以便可以将其导入到更大的单元测试套件中,或者只使用python thisfile.py运行。
#!/usr/bin/python
"""
VRML Writer tests
"""
import unittest
import os
import sys
if __name__ == '__main__':
global save_syspath
save_syspath = sys.path
sys.path = [os.path.abspath("../src/")] + sys.path
from cgtools.VizValueTools import *
if __name__ == '__main__':
sys.path = save_syspath # RESTORE SYS.PATH
# use some common constants to make tests easier
MINV = 0.002
MAXV = 12.789
class TestColdHotColorGeneration(unittest.TestCase):
def testGeneratesLimitValues(self):
assert generateColdHotColorValue(MINV, MAXV, MINV) == (0.0, 0.0, 1.0)
assert generateColdHotColorValue(MINV, MAXV, MAXV) == (1.0, 0.0, 0.0)
assert generateColdHotColorValue(0, 0, 0) == (1.0, 0.0, 0.0) # cope with weird case where range is effectively one value, should be always top
def testGeneratesLimitValuesWithClipping(self):
assert generateColdHotColorValue(MINV, MAXV, MINV - 1.2) == (0.0, 0.0, 1.0)
assert generateColdHotColorValue(MINV, MAXV, MAXV + 49) == (1.0, 0.0, 0.0)
def testGeneratesMiddleValue(self):
"""
Note to be careful picking values so your value IS in the middle,
to generate pure green
"""
assert generateColdHotColorValue(1.0, 3.0, 2.0) == (0.0, 1.0, 0.0)
if __name__ == '__main__':
# When this module is executed from the command-line, run all its tests
unittest.main()
我会去蟒蛇。 如果你真的需要性能,那么你总是可以编写C / C ++扩展并在python中使用它们。
算法在Python中很好(尽管由于全局锁定,你只能飞一个OS调度的python线程); 然而,当谈到数据结构+算法时,你需要固定的复杂性保证,这种情况下你将Python与C混合。
我想我所说的内容更适用于长时间运行的计算。 您可以在python hashmap原语的顶部模拟数据结构。
我也投票给python。 算法时,我们倾向于研究算法本身,而不是语言,低级细节。 基本上,我们在抽象层面上工作。 使用python,我们不太可能被侧面跟踪。 但如果您对C ++非常熟悉和熟悉并且可以自由地使用它来表达您的想法,那就使用它吧。
使用C ++,您有时会更多地关注语言问题,而不是问题本身,所以Python。 我甚至建议你用像Matlab这样的高级语言来做(尽管语言本身可能有点难看)。
如果使用C ++意味着STL是公平的游戏,我会说它值得认真考虑。 STL是一个很棒的库,结合了结构,迭代器和算法。 我喜欢Python的建议,但如果我能使用STL,我会重新考虑C ++。
请记住,Python被编译为字节码,然后在VM中进行解释。 因此,性能并不比C ++更好(更快)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.