注释"文件类型的正确方法"在Python中

时间:2017-01-19 18:15:28

标签: python python-3.5 type-hinting

在现代版本的Ppython中,根据PEP 484,可以使用函数注释进行静态类型分析。通过输入模块可以轻松实现这一点。

现在我想知道如何给出"类型提示"走向"文件流"。

def myfunction(file: FILETYPE):
    pass

with open(fname) as file:
    myfunction(file)

我将FILETYPE插入什么内容?

使用print(type(file))返回<class '_io.TextIOWrapper'>,但根本不清楚。

不存在通用&#34;文件&#34;类型?

3 个答案:

答案 0 :(得分:10)

您可以使用typing.IOtyping.TextIOtyping.BinaryIO来表示不同类型的I / O流。引用documentation

  

输入。 io

     

I / O流类型的包装器命名空间。

     

这为通用类型IO[AnyStr]和别名TextIOBinaryIO定义了
  分别为IO[str]IO[bytes]。这些代表了   类型的I / O流如此   由open()返回。

     

这些类型也可以直接以typing.IOtyping.TextIO
方式访问   typing.BinaryIO

答案 1 :(得分:6)

我认为你想要io.IOBase,“它是所有I / O类的抽象基类,对字节流起作用。”

请注意,这还包括内存流,例如io.StringIOio.BytesIO。有关详细信息,请阅读module io上的文档。

答案 2 :(得分:0)

要么:

from typing import TextIO # or IO or BinaryIO

def myfunction(file: TextIO ):
    pass

from typing import TYPE_CHECKING
if TYPE_CHECKING:
    from typing import TextIO # or IO or BinaryIO

def myfunction(file: 'TextIO'):
    pass

第二种方法可以避免在执行期间导入类。虽然python仍然必须在执行期间导入TYPE_CHECKING,但最好避免仅为类型提示导入类:(1)不执行(只是解析),以及(2)它可以避免循环导入。