我在文档中读到,从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)
即使函数应该返回一个字符串,解释器甚至不会抱怨我返回的是列表而不是字符串。
我知道这些是人为的例子,但是我做错了吗?
答案 0 :(得分:2)
不,您没有做错任何事情。
类型提示是在PEP 484中实现的,该提示着重指出 Python仍将是一种动态类型化的语言,并且即使按照约定,作者也不希望强制使用类型提示。
类型提示的目的是允许linters / IDE等标记可能的类型问题,而不是提供其他运行时错误信息。