【问题标题】:Python: what is the purpose of '|'Python:'|'的目的是什么
【发布时间】:2021-12-22 16:24:26
【问题描述】:

所以基本上,当我转到builtins.py 文件时,我会发现很多这样的函数:

def foo(o: object, arg: int | None = ...) -> int: ...

当我自己尝试时,它实际上并没有给出任何错误,并且仍然像正常功能一样工作。我想知道为什么人们使用它以及它的目的是什么。当我创建一个类似foo 函数的函数时(这是在此之前给出的第一个示例):

def bar(arg: int, arg1: int | None = ...) -> int:
    try:
        return arg + arg1
    except:
        print('You cannot add a string and int together')

我发现def bar(arg: int, arg1: int): ...def bar(arg: int, arg1: int | None = ...) -> int: ... 之间没有任何区别

【问题讨论】:

标签: python


【解决方案1】:

这是type hint。在这种情况下,int | NoneUnion type,表示 arg 参数将是 intNone

您还可以在此处找到一些有价值的背景信息:PEP 483

这些提示的一个好处是 IDE 和 linter 可以使用它们来帮助分析您的代码并捕获某些类型的错误。 here 提供更多高级信息。

【讨论】:

  • 谢谢,这可行,但为什么有些函数有| None = ...?我不知道这意味着什么。默认值?
  • None 是一个表示“没有价值”的对象。请参阅this question 了解更多信息。
【解决方案2】:

|or 运算符。所以它基本上是说arg1 的类型可以是整数或无。

在此处查看更多信息:https://docs.python.org/3/library/typing.html#typing.Optional

【讨论】:

    【解决方案3】:

    这是一个类型提示或类型注释。它在PEP 484| 中进行了描述,表示联合,所以基本上 arg1 可以是 int 或 NoneType。为什么我们需要输入提示?那是因为它可以帮助我们更安全、更方便地编写代码。如果您使用任何体面的 IDE,由于其类型提示,您可以获得 IDE 自动完成的帮助。

    【讨论】:

      【解决方案4】:

      参数列表和冒号之间的 -> int 是该函数的返回类型。这允许你指定函数将返回什么,这样如果你有一个跨越屏幕高度的更大函数,你就不必通过函数寻​​找返回值并确定它们的类型。

      该 |运算符是一个联合,这意味着该函数采用的参数是两种类型之一。例如,函数def func(param: int|str, param2: bool|float) 将采用intstr 的参数,而param2 将是boolfloat

      或者,在字典的情况下,|运算符将两个字典合并为一个。

      【讨论】:

        猜你喜欢
        • 2017-05-04
        • 2012-02-21
        • 2012-12-17
        • 2010-10-17
        • 2021-08-09
        • 2016-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多