Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.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
如何知道CPython的哪一部分是用C实现的?_Python_C_Optimization_Cpython - Fatal编程技术网

如何知道CPython的哪一部分是用C实现的?

如何知道CPython的哪一部分是用C实现的?,python,c,optimization,cpython,Python,C,Optimization,Cpython,CPython标准库中用C编写的部分比用Python实现的部分要快。为了优化代码,最好使用用C实现的函数。我的问题是,您如何确定或知道标准库的哪些部分是用C实现的 我的问题是,您如何确定或了解用C实现的标准库的哪些部分 您可以阅读标准库的源代码 或者,您可能应该做的是测量代码的性能,然后基于此采取行动 我的问题是,您如何确定或了解用C实现的标准库的哪些部分 您可以阅读标准库的源代码 或者,您可能应该做的是测量代码的性能,然后基于此采取行动 CPython标准库中用C编写的部分比用Pyth

CPython标准库中用C编写的部分比用Python实现的部分要快。为了优化代码,最好使用用C实现的函数。我的问题是,您如何确定或知道标准库的哪些部分是用C实现的

我的问题是,您如何确定或了解用C实现的标准库的哪些部分

您可以阅读标准库的源代码

或者,您可能应该做的是测量代码的性能,然后基于此采取行动

我的问题是,您如何确定或了解用C实现的标准库的哪些部分

您可以阅读标准库的源代码

或者,您可能应该做的是测量代码的性能,然后基于此采取行动

CPython标准库中用C编写的部分比用Python实现的部分要快。为了优化代码,最好使用C语言中的函数和实现

虽然这是正确的,但这只是故事的一半。所有内置函数都是用C实现的,很多标准库模块全部或部分都是用C实现的,所以所有东西都已经使用了C函数

例如,
collections.Counter
是一个纯Python类,但是
collections.\u count\u elements
函数(Python3)是用C实现的,由
Counter
使用,因此它可以“更快地计数”。但是使计数器成为C函数

因此,这不是一件明确的事情,您不应该期望Python部分一定(远)比用C实现慢。同样,“用C编写”或“用Python编写”也是一种实现细节。因此,现在用Python编写的代码可以在将来的版本中重新实现为C函数(可能也会反过来,但这种情况发生的频率较低,或者根本不会发生)

如何确定或了解用C实现的标准库的哪些部分

你必须亲自调查。有些模块可以使用C实现和Python实现(例如
StringIO
cStringIO
(Python2)),而其他模块则完全用C实现(例如
itertools
),其他模块则部分用C实现(例如
collections

幸运的是,CPython源代码可以在上找到,但仍然需要查看文件夹以检查是否有Python实现。如果没有Python实现,几乎可以肯定它完全是用C编写的,但是如果有
.py
文件(或子文件夹),您仍然需要检查导入的内容。例如,导入(和重写)许多在C中实现的东西

CPython标准库中用C编写的部分比用Python实现的部分要快。为了优化代码,最好使用C语言中的函数和实现

虽然这是正确的,但这只是故事的一半。所有内置函数都是用C实现的,很多标准库模块全部或部分都是用C实现的,所以所有东西都已经使用了C函数

例如,
collections.Counter
是一个纯Python类,但是
collections.\u count\u elements
函数(Python3)是用C实现的,由
Counter
使用,因此它可以“更快地计数”。但是使计数器成为C函数

因此,这不是一件明确的事情,您不应该期望Python部分一定(远)比用C实现慢。同样,“用C编写”或“用Python编写”也是一种实现细节。因此,现在用Python编写的代码可以在将来的版本中重新实现为C函数(可能也会反过来,但这种情况发生的频率较低,或者根本不会发生)

如何确定或了解用C实现的标准库的哪些部分

你必须亲自调查。有些模块可以使用C实现和Python实现(例如
StringIO
cStringIO
(Python2)),而其他模块则完全用C实现(例如
itertools
),其他模块则部分用C实现(例如
collections


幸运的是,CPython源代码可以在上找到,但仍然需要查看文件夹以检查是否有Python实现。如果没有Python实现,几乎可以肯定它完全是用C编写的,但是如果有
.py
文件(或子文件夹),您仍然需要检查导入的内容。例如,通过阅读他们的文档,导入(并覆盖)许多在C中实现的东西。

?我对安装的Python 2和Python 3文档非常感兴趣。他们并不总是提到某些东西是否是用C实现的?你似乎还没有看过@lilezekAnd之前的文档,如果你想用的东西没有用C实现,你会怎么做?此外,C和Python之间的差异只是一个“常量因素”(对于作为Python函数公开的函数,通常为2-3),但是正确选择算法和数据结构可能更为重要,cPickle可以比pickle快1000倍,因为前者是用C实现的。这只与python 2有关。例如,Python3中没有
cPickle
,只有
pickle
。默认情况下,它使用C实现(
\u pickle
),如果可以找到其他实现,它将返回到python实现。通过阅读他们的文档,我对安装的python 2和python 3文档非常感兴趣。他们并不总是提到某些东西是否是用C实现的?看来你还没看一眼