我尝试了下面的代码。 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
,我该如何使用它?
_io
和io
模块之间的区别是什么?
答案 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
/ _multiprocessing
,csv
/ {{ 1}}等等。基本上所有情况下模块都有一个用C语言编写的组件。
答案 1 :(得分:5)
_io
是io
模块的C实现部分,io
是python部分。
来自PEP8;
当用C或C ++编写的扩展模块具有提供更高级别(例如更多面向对象)的接口的Python模块时,C / C ++模块具有前导下划线(例如_socket)。