' _io'之间的区别是什么?和' io'?

时间:2014-10-06 01:07:38

标签: python python-3.x

我尝试了下面的代码。 f的类型为_io.TextIOWrapper,但我找不到有关此类型的任何帮助信息。虽然确实存在另一种类似的io.TextIOWrapper类型。

>>> f=open("c:\setup.log","r")
>>> type(f)
<class '_io.TextIOWrapper'>
>>> help(_io.TextIOWrapper)
Traceback (most recent call last):
  File "<pyshell#204>", line 1, in <module>
    help(_io.TextIOWrapper)
NameError: name '_io' is not defined
>>> help(io.TextIOWrapper)
Help on class TextIOWrapper in module io:

我的问题是:

  • 如果未定义名称_io,我该如何使用它?

  • _ioio模块之间的区别是什么?

2 个答案:

答案 0 :(得分:9)

_io模块提供io模块内部使用的C代码。它的来源可以找到here。您实际上可以单独导入io_io

>>> import _io
>>> import io
>>> _io
<module 'io' (built-in)>  # The fact that this says io instead of _io is a bug (Issue 18602)
>>> io
<module 'io' from '/usr/lib/python3.4/io.py'>
>>> _io.TextIOWrapper
<type '_io.TextIOWrapper'>

此模式(modulename中提供的_modulename的C代码)实际上用于多个模块 - multiprocessing / _multiprocessingcsv / {{ 1}}等等。基本上所有情况下模块都有一个用C语言编写的组件。

答案 1 :(得分:5)

_ioio模块的C实现部分,io是python部分。

来自PEP8;

  

当用C或C ++编写的扩展模块具有提供更高级别(例如更多面向对象)的接口的Python模块时,C / C ++模块具有前导下划线(例如_socket)。