我是python的新手。但我很好奇为什么python中的mmap是作为共享库实现的,而不是.py文件。这使得我的IDE无法索引mmap的源代码。
这是我的python3.2环境(ubuntu 12.04)中的输出:
markz@markz-hp6200:~$ python3.2
Python 3.2.3 (default, Oct 19 2012, 20:10:41)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mmap
>>> print(mmap.__file__)
/usr/lib/python3.2/lib-dynload/mmap.cpython-32mu.so
>>>
答案 0 :(得分:4)
mmap
使用特定于操作系统的工具,例如Linux上的mmap
功能(以及Windows上的MapViewOfFile
功能)。这些在Python中不是直接可用的(例如通过os
模块),因此至少部分mmap
模块必须用C语言编写以调用这些函数。
此特定用途与效率无关 - 模块必须用C语言编写(或使用ctypes
)才能使用此操作系统功能。
答案 1 :(得分:1)
用C语言编写的Cpython标准库中有很多东西。其他例子是itertools
,部分csv
(_csv
),部分collections
( _collections
)......我认为其中一个主要原因是提高效率。开发人员决定,如果他们使用编译语言,他们可以让代码更快。
答案 2 :(得分:1)
mmap
在C中实现,而不是在python中实现。用C实现的扩展模块必须是共享库。
为什么呢?在这种情况下,可能是因为您无法在不访问C的情况下实现该功能。在python中实现的模块是使用其他模块中提供的功能实现的。但是mmap功能是通过调用C标准库函数来实现的。它不可能是一个python文件。