用C语言编写的CPython标准库的部分比在Python中实现的部分要快。为了优化代码,如果使用C中实现的函数会很好。我的问题是如何确定或知道标准库的各个部分是用C实现的?
答案 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实现(例如StringIO
与cStringIO
(python 2)),其他模块完全用C实现(例如itertools
),其他部分用C语言实现(例如collections
)。
幸运的是,CPython源代码可以在GitHub获得,但仍需要查看Lib
文件夹以检查是否有Python实现。如果没有Python实现,它几乎肯定是用C语言编写的,但是如果有.py
文件(或在子文件夹中),你仍然需要检查那里导入的内容。例如collections
从_collections
导入(并覆盖)许多在C中实现的内容。
答案 1 :(得分:0)