Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么Python程序通常比用C或C+编写的等效程序慢+;?_C++_Python_C_Performance_Programming Languages - Fatal编程技术网

C++ 为什么Python程序通常比用C或C+编写的等效程序慢+;?

C++ 为什么Python程序通常比用C或C+编写的等效程序慢+;?,c++,python,c,performance,programming-languages,C++,Python,C,Performance,Programming Languages,为什么Python看起来比C/C++慢?我把Python作为我的第一个编程语言,但我刚从C开始,我觉得我可以看到明显的区别。 < P> C和C++编译成本机代码,也就是说,它们直接运行在CPU上。Python是一种解释语言,这意味着您编写的Python代码必须经过许多、许多抽象阶段才能成为可执行的机器代码。Python和C之间的区别是解释(字节码)和编译(本机)语言之间的通常区别。就我个人而言,我并不认为python很慢,它管理得很好。当然,如果你试图在它的领域之外使用它,它会变慢。为此,您可以

为什么Python看起来比C/C++慢?我把Python作为我的第一个编程语言,但我刚从C开始,我觉得我可以看到明显的区别。

< P> C和C++编译成本机代码,也就是说,它们直接运行在CPU上。Python是一种解释语言,这意味着您编写的Python代码必须经过许多、许多抽象阶段才能成为可执行的机器代码。

Python和C之间的区别是解释(字节码)和编译(本机)语言之间的通常区别。就我个人而言,我并不认为python很慢,它管理得很好。当然,如果你试图在它的领域之外使用它,它会变慢。为此,您可以为python编写C扩展,它将时间关键型算法放在本机代码中,使之更快。

python是一种比C更高级的语言,这意味着它从您那里抽象出计算机的细节—内存管理、指针等,并允许你以更接近人类思维的方式编写程序

如果只测量执行时间,C代码的运行速度通常是Python代码的10到100倍。但是,如果还包括开发时间,Python通常比C更重要。对于许多项目来说,开发时间远比运行时性能重要。更长的开发时间直接转化为额外的成本、更少的功能和较慢的上市时间

在内部,Python代码执行速度较慢的原因是代码在运行时被解释,而不是在编译时编译为本机代码


其他解释语言(如Java字节码和.NET字节码)的运行速度比Python快,因为标准发行版包含一个在运行时将字节码编译为本机代码的脚本。CPython没有JIT编译器的原因是Python的动态特性使得编写JIT编译器变得困难。编写一个更快的Python运行时是不可能的,因此您应该期望性能差距在将来会缩小,但是标准Python发行版包含一个功能强大的JIT编译器可能还需要一段时间

除了已经发布的答案之外,还有一点是pythons能够在运行时更改您在例如C中无法更改的内容。您可以在运行时向类添加成员函数。 此外,pythons的动态特性使我们无法说出将传递给函数的参数类型,这反过来又使优化变得更加困难

似乎是绕过优化问题的一种方法


尽管如此,对于NumberRunning之类的东西,它的性能可能不会接近C。

CPython速度特别慢,因为它没有实时优化器(因为它是参考实现,在某些情况下选择简单而不是性能)。是一个将LLVM支持的JIT添加到CPython的项目,并实现了巨大的加速。Jython和IronPython可能比CPython快得多,而且它们有高度优化的虚拟机(JVM和.NET CLR)支持


然而,有一件事可以说会让Python变慢,那就是它是动态类型的,并且每个属性访问都有大量的查找

例如,在对象
A
上调用
f
将导致在
\uuuu dict\uuuu
中进行可能的查找,调用
\uu getattr\uuuuu
等,然后最后在可调用对象
f
上调用

关于动态类型,如果您知道要处理的数据类型,可以进行许多优化。例如,在Java或C中,如果您有一个要求和的整数的直数组,则最终汇编代码可以非常简单,只需在索引
i
处获取值,将其添加到
累加器中,然后递增
i

在Python中,很难使代码达到最佳状态。假设您有一个包含
int
s的列表子类对象。在添加任何之前,Python必须调用
list.\uuu getitem\uuuuuuuuuuuuui)
,然后通过调用
累加器将其添加到“累加器”中。\uuuu add\uuuu(n)
,然后重复。这里可能会发生大量的替代查找,因为另一个线程可能在调用add或getitem之间更改了例如
\uuu getitem\uuuu
方法、列表实例的dict或类的dict。即使在本地名称空间中查找累加器和列表(以及您正在使用的任何变量),也会导致dict查找。当使用任何用户定义的对象时,同样的开销也会出现,尽管对于某些内置类型,这种开销会有所减轻


还值得注意的是,诸如bigint(Python 3中的int,Python 2.x中的long)、list、set、dict等基本类型是人们在Python中经常使用的。在这些对象上有大量的内置操作,这些操作已经足够优化了。例如,对于上面的示例,您只需调用
sum(list)
,而不用累加器和索引。坚持这些,再加上使用int/float/complex进行一些数字运算,通常不会有速度问题,如果有,可能会有一个小的时间关键单元(例如一个SHA2摘要函数),您可以简单地转移到C(或Jython中的Java代码)。事实上,当你对C或C++进行编码时,你将浪费掉<>强> > /强>做你可以在几秒钟/行的Python代码中完成的事情。我想说,这种折衷总是值得的,除非你正在做嵌入式或实时编程之类的事情,但你负担不起。

将C/C++与Python进行比较是不公平的。就像比较F1赛车和多用途卡车一样

令人惊讶的是,与其他动态语言相比,Python的速度有多快。虽然这种方法通常被认为是有缺陷的,但看看t
1.Use python3 for run and code python command like Ubuntu or any Linux distro use python3 main.py and update regularly your python so you python3 framework modules and libraries i will suggest use pip 3.

2.Use [Numba][1] python framework with JIT compiler this framework use for data visualization but you can use for any program this framework use GPU acceleration of your program.

3.Use [Profiler optimizing][1] so this use for see with function or syntax for bit longer or faster also have use full to change syntax as a faster for python its very god and work full so this give a with function or syntax using much more time execution of code.

4.Use multi threading so making multiprocessing of program for python so use CPU cores and threads so this make your code much more faster.

5.Using C,C#,C++ increasing python much more faster i think its called parallel programing use like a [cpython][1] .

6.Debug your code for test your code to make not bug in your code so then you will get little bit your code faster also have one more thing Application logging is for debugging code.

and them some low things that makes your code faster:

 1.Know the basic data structures for using good syntax use make best code.

 2.make a best code have Reduce memory footprinting.

 3.Use builtin functions and libraries.

 4.Move calculations outside the loop.

 5.keep your code base small.