dem*_*nno 5 python types function typechecking python-3.x
def greeting(name: str) -> str:
return 'Hello ' + name
Run Code Online (Sandbox Code Playgroud)
用str调用函数的正确方法
>>> greeting("John")
'Hello John'
Run Code Online (Sandbox Code Playgroud)
如果我用int调用它:
>>> greeting(2)
TypeError: must be str, not int
Run Code Online (Sandbox Code Playgroud)
用列表打电话
>>> greeting(["John"])
TypeError: must be str, not list
Run Code Online (Sandbox Code Playgroud)
一切正常吗?greeting
函数总是接受str作为参数.
但是,如果我尝试测试函数返回类型,例如,使用相同的函数但将返回类型更改为int.
def greeting(name: str) -> int:
return 'Hello ' + name
Run Code Online (Sandbox Code Playgroud)
函数返回str
但类型定义为int
,并且不会引发异常:
>>> greeting("John")
'Hello John'
Run Code Online (Sandbox Code Playgroud)
另一个例子:
def greeting(name: str) -> str:
return len(name)
>>> greeting("John")
4
Run Code Online (Sandbox Code Playgroud)
尽管PEP 484表示返回类型是预期的str
,但它实际上并不类似于参数类型检查,这可以在上面的例子中看到.
这表明name参数的预期类型是str.类似地,预期的返回类型是str.
我错过了什么或没有返回类型的类型检查?
这个问题可能会给 python3 类型提示的新手带来一些困惑。python3 中不支持类型检查。这意味着如果您在参数中传递了错误的类型,Python 解释器将不会引发异常。
如果您需要此功能,可以使用mypy 。
上面例子中引发的实际原因TypeError
是(+)
操作符的不安全使用。如果您使用字符串格式更改示例中提供的函数
def greeting(name: str) -> str:
return 'Hello {}'.format(name)
Run Code Online (Sandbox Code Playgroud)
上述所有情况都无需 raise 即可工作TypeError
,并且在运行时不会进行类型检查。
Type Hinting 由 PyCharm 等 IDE 使用,PyCharm Type Hinting,但它只是 IDE 显示的警告,而不是 python 解释器显示的警告。
归档时间: |
|
查看次数: |
172 次 |
最近记录: |