【发布时间】:2019-08-12 22:02:30
【问题描述】:
我在文档中读到 Python 3.5 版本中存在类型提示 我在 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)
即使函数应该返回一个字符串,解释器甚至不会抱怨我返回的是一个列表而不是一个字符串。
我知道这些都是人为的例子,但我做错了吗?
【问题讨论】:
-
CPython 不会在运行时检查类型提示...使用像
mypy这样的类型检查器来检查您的输入声明。 -
旁注:您的代码与您的描述和提示不符。你的参数命名为
name,但函数体使用str。并且您使用注释声明返回str,但使用print,而不是return,因此实际返回是None。
标签: python python-3.x types type-hinting python-typing