【问题标题】:How to specify type that can be either integer or string [duplicate]如何指定可以是整数或字符串的类型[重复]
【发布时间】:2020-09-29 22:07:51
【问题描述】:

我有一个函数,它的参数应该是integerstring

from typing import int,str

def MyFunc(arg:int) -> None:
    print(arg)

但我想知道如何编写它来告诉用户 arg 既可以是 int 又可以是 str?

【问题讨论】:

  • 这就是printinput存在的原因。
  • 不,伙计。这只是一个例子,我的功能是别的东西
  • 哦,好吧,对不起..

标签: python typing function-parameter


【解决方案1】:

首先,我认为您不需要使用导入,因为 intstr 是基本类型。

除此之外,我的解决方案是 (python3)

from typing import Union

def MyFunc(arg:Union[int, str]) -> None:
    print(arg)

这是标准方法,它还允许您使用类型检查器,例如 mypyUnion 关键字表示您的参数可以是方括号内的任一类型。

【讨论】:

  • 谢谢。但是你能告诉我 arg:Union[int, str] 和 arg:[int, str] 有什么区别吗?
  • 我也知道我不需要导入打字,但你知道 SO 用户。他们只是认为我不知道在输入什么,所以他们关闭了我的问题并将其提交给另一个 :)
  • : 符号之后的内容基本上被解释为 python 的类型,而不是在运行时使用。你可以把大部分东西放在那里,它不会抱怨。使用 Union 是更好的方法,因为它是定义类型的通用方法,并且可以由类型检查器解析。有 arg: "int or str" 不能被检查,所以除了文档是没用的
【解决方案2】:

一个选项是

def MyFunc(arg:"int or str") -> None:
    print(arg)

另一种选择是

def MyFunc(arg:[int,str]) -> None:
    print(arg)

【讨论】:

  • 谢谢。但是您的第二个示例并不意味着 arg 类型是列表?
  • 通常,如果你想指定参数是一个列表,你写def MyFunc(arg: list) -> None
  • 啊哈。非常感谢。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 2021-03-15
相关资源
最近更新 更多