【问题标题】:Python type hinting with numbers带有数字的 Python 类型提示
【发布时间】:2021-12-01 02:51:43
【问题描述】:

我刚刚遇到了 Python 类型提示的一个奇怪行为。

>>> def x(y: int):
    return y
>>> d=x('1')
>>> print(type(d))
<class 'str'>
>>> d
'1'

当我将一个数字作为字符串传递给参数被强制转换为 int 的函数时,它仍然会生成字符串。我认为这种意外行为的关键在于它不是投射,而是暗示。但为什么它会这样呢?如果我将 'one' 作为参数传递,它会给我一个 NameError。

【问题讨论】:

  • Python 不是编译语言,运行时不使用类型提示系统(除非您使用某些特定的第三方库)。这些类型提示允许您运行静态分析工具(例如 mypy)来确定您的代码在进行赋值时是否尊重函数/方法的联系并尊重变量类型。
  • 这能回答你的问题吗? How to use type hints in python 3.6?

标签: python type-hinting python-typing


【解决方案1】:

你没有在函数内部进行任何类型的转换,类型提示就是这样;提示。它们充当文档,不会将类型强制转换或强制转换为其他类型。

你需要这样做

def x(y):
    return int(y)

现在要准确输入提示这个函数

def x(y: str) -> int:
    return int(y)

【讨论】:

    【解决方案2】:

    Python 的类型提示纯粹用于静态分析:no 在运行时进行类型检查是完全可以的。这也可以:

    x("One")
    

    您的One 失败,因为One 不存在,但这会起作用:

    One = "seventeen"
    x(One)
    

    【讨论】:

      猜你喜欢
      • 2017-10-09
      • 2017-10-14
      • 2017-11-01
      • 2017-07-07
      • 2020-11-23
      • 2020-04-24
      • 2018-10-19
      • 2020-10-27
      • 2022-10-07
      相关资源
      最近更新 更多