【问题标题】:How to correctly use python type hinting? [duplicate]如何正确使用 python 类型提示? [复制]
【发布时间】: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


【解决方案1】:

不,你没有做错任何事。

类型提示在 PEP 484 中实现,其中强调 Python 将保持动态类型语言,作者不希望强制类型提示,即使按照惯例也是如此。

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

【讨论】:

    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 2020-02-20
    • 2021-10-24
    • 2017-02-25
    • 2020-08-22
    • 2020-04-01
    • 2020-10-24
    • 2018-04-21
    相关资源
    最近更新 更多