如何输入注释字符串的长度?

Goo*_*ver 9 python python-3.x

我想在 python 中输入注释一个只​​接受单个字符的函数,例如:\n(s: str) -> int

\n

由于 Python 没有单个字符的类型,因此您不能只执行类似(s: char) -> int.

\n

有没有一种方法可以让键入的内容s: str只能是一个字符?

\n

我发现这对于编写代码时的提示很有用。

\n

这是我的完整示例:

\n
import unicodedata\n\nroman_numeral_lookup = {"I": 1, "V": 5, "X": 10, ...}\n\ndef exact_roman_numeral(s: str) -> int:\n    """Return the value of a single Roman numeral. Dosen\'t support multicharacter roman numerals such as \'XII\' or Apostrophus."""\n\n    # Convert Unicode Roman numerals into to their normalised text version. e.g. \xe2\x85\xa9 -> X, \xe2\x85\xb0 -> I\n    s = unicodedata.normalize("NFKC", s).upper()\n\n    if s in roman_numeral_lookup:\n        return roman_numeral_lookup[s]\n\n    else:  # Some form of invalid value.\n        if not isinstance(s, str):\n            raise TypeError("Argument must be of type str.")\n        elif len(s) != 1:\n            raise ValueError("Must be a single Roman numeral.")\n        else:\n            raise ValueError("Not a valid/supported Roman numeral.")\n
Run Code Online (Sandbox Code Playgroud)\n

(我知道错误不是最好的)

\n

Gra*_*ex. 4

好吧,理论上,类型注释不应该像您希望的那样使用 - 这意味着,并非代码中的每个约束都应该由类型注释来表达。

现在,为了回答你的问题,你当然可以构建自己的类型注释,但在我看来,这会是太多的工作而结果太少。

SO 上还有其他答案,描述了如何定义自定义注释

您可以随时:

  • 在你的文档字符串中描述你的变量应该是 1 个字符长
  • 进行健全性/验证检查并引发适当的异常。
  • 使用Marshmallow之类的东西来清理/序列化您的数据

  • @GoodClover Const 泛型和类型泛型是不同的东西,你想要的并不像听起来那么简单。并且您无法参数化“str”,因为它不是通用容器。 (2认同)