pau*_*l23 17 python type-hinting python-3.5
根据PEP 484,在现代版本的Ppython中,可以使用函数注释进行静态类型分析.通过打字模块可以轻松实现这一点.
现在我想知道如何向"文件流"提供"类型提示".
def myfunction(file: FILETYPE):
pass
with open(fname) as file:
myfunction(file)
Run Code Online (Sandbox Code Playgroud)
我会插入FILETYPE什么?
使用根本不明确的print(type(file))回报<class '_io.TextIOWrapper'>.
是不是有通用的"文件"类型?
Eug*_*ash 11
您可以使用typing.IO,typing.TextIO和typing.BinaryIO表示不同类型的I/O流.引用文档:
班级打字.IO
I/O流类型的包装器命名空间.
这定义了泛型类型
IO[AnyStr]和别名TextIO, 分别BinaryIO用于和.这些代表I/O流的类型,例如 返回的.IO[str]IO[bytes]open()这些类型也直接访问的
typing.IO,typing.TextIO和
typing.BinaryIO.
要么这样:
from typing import TextIO # or IO or BinaryIO
def myfunction(file: TextIO ):
pass
Run Code Online (Sandbox Code Playgroud)
或者这个
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from typing import TextIO # or IO or BinaryIO
def myfunction(file: 'TextIO'):
pass
Run Code Online (Sandbox Code Playgroud)
第二种方法将避免在执行期间导入类。尽管 pythonTYPE_CHECKING在执行期间仍然需要导入,但避免仅为类型提示导入类是一个好习惯:(1) 不会被执行(只是解析),以及 (2)它可以避免循环导入。