如何正确使用python类型提示?

时间:2019-03-21 23:35:02

标签: python python-3.x types type-hinting python-typing

我在文档中读到,从3.5版开始,Python中存在类型提示 我在ipython终端中编写了两个函数,以测试这对“相同”函数的含义。

def dostuff(name: str) -> str:
  print(str.capitalize())

def do_stuff(name):
  print(str.capitalize())

呼叫dostuff('arthur')do_stuff('arthur')都按预期返回“亚瑟”。

但是,调用do_stuff([])dostuff([])也会返回错误:

AttributeError: 'list' object has no attribute 'capitalize'

这是有道理的,两者都存在相同的错误,并且是有效的,但是为什么类型提示/检查程序实际上没有声明性地声明argument not of type 'str'或其他内容?

此外,如果您定义如下内容:

def do_stuff(name: str) -> str: 
    return list(name)  

即使函数应该返回一个字符串,解释器甚至不会抱怨我返回的是列表而不是字符串。

我知道这些是人为的例子,但是我做错了吗?

1 个答案:

答案 0 :(得分:2)

不,您没有做错任何事情。

类型提示是在PEP 484中实现的,该提示着重指出 Python仍将是一种动态类型化的语言,并且即使按照约定,作者也不希望强制使用类型提示。

类型提示的目的是允许linters / IDE等标记可能的类型问题,而不是提供其他运行时错误信息。