在现代版本的Ppython中,根据PEP 484,可以使用函数注释进行静态类型分析。通过输入模块可以轻松实现这一点。
现在我想知道如何给出"类型提示"走向"文件流"。
def myfunction(file: FILETYPE):
pass
with open(fname) as file:
myfunction(file)
我将FILETYPE
插入什么内容?
使用print(type(file))
返回<class '_io.TextIOWrapper'>
,但根本不清楚。
不存在通用&#34;文件&#34;类型?
答案 0 :(得分:10)
您可以使用typing.IO
,typing.TextIO
和typing.BinaryIO
来表示不同类型的I / O流。引用documentation:
类输入。 io
I / O流类型的包装器命名空间。
这为通用类型
IO[AnyStr]
和别名TextIO
和BinaryIO
定义了
分别为IO[str]
和IO[bytes]
。这些代表了 类型的I / O流如此 由open()
返回。这些类型也可以直接以
typing.IO
,typing.TextIO
和
方式访问typing.BinaryIO
。
答案 1 :(得分:6)
我认为你想要io.IOBase
,“它是所有I / O类的抽象基类,对字节流起作用。”
请注意,这还包括内存流,例如io.StringIO
和io.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)它可以避免循环导入。