如何知道在C中实现CPython的哪个部分?

时间:2017-09-02 10:34:56

标签: python c optimization cpython

用C语言编写的CPython标准库的部分比在Python中实现的部分要快。为了优化代码,如果使用C中实现的函数会很好。我的问题是如何确定或知道标准库的各个部分是用C实现的?

2 个答案:

答案 0 :(得分:4)

  

用C语言编写的CPython标准库的部分比在Python中实现的部分要快。为了优化您的代码,如果您使用这些函数并在C中实现,那就很好了。

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

例如collections.Counter是纯Python类,但collections._count_elements函数(Python 3)在C中实现并由Counter使用,因此它可以更快地计算#34 ;.但是那个Counter是C函数吗?

所以它不是一个明确的事情,你不应该期望Python部分必然(比)在C中实现要慢得多。另外"用C和#编写34;或#"用Python编写"是一种实现细节。因此,现在用Python编写的内容可以在未来的版本中重新实现为C函数(可能也反过来,但这种情况发生频率较低或根本不发生)。

  

如何确定或了解在C中实现的标准库部分?

你必须自己调查一下。一些模块可用于C实现和Python实现(例如StringIOcStringIO(python 2)),其他模块完全用C实现(例如itertools),其他部分用C语言实现(例如collections)。

幸运的是,CPython源代码可以在GitHub获得,但仍需要查看Lib文件夹以检查是否有Python实现。如果没有Python实现,它几乎肯定是用C语言编写的,但是如果有.py文件(或在子文件夹中),你仍然需要检查那里导入的内容。例如collections_collections导入(并覆盖)许多在C中实现的内容。

答案 1 :(得分:0)

  

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

您可以阅读标准库的来源。

Python Modules

C modules

或者,您可能应该做的是衡量代码的性能,然后根据它进行操作。