python - 如何键入注释字符串的长度?

标签 python python-3.x

我想在python中键入一个只接受单个字符的函数,以这个例子为例:(s: str) -> int由于 Python 没有用于单个字符的类型,因此您不能只执行 (s: char) -> int 之类的操作。 .
有什么方法可以输入 s: str应该只有一个字符吗?
我可以看到这在编写代码时提示很有用。
这是我的完整示例:

import unicodedata

roman_numeral_lookup = {"I": 1, "V": 5, "X": 10, ...}

def exact_roman_numeral(s: str) -> int:
    """Return the value of a single Roman numeral. Dosen't support multicharacter roman numerals such as 'XII' or Apostrophus."""

    # Convert Unicode Roman numerals into to their normalised text version. e.g. Ⅹ -> X, ⅰ -> I
    s = unicodedata.normalize("NFKC", s).upper()

    if s in roman_numeral_lookup:
        return roman_numeral_lookup[s]

    else:  # Some form of invalid value.
        if not isinstance(s, str):
            raise TypeError("Argument must be of type str.")
        elif len(s) != 1:
            raise ValueError("Must be a single Roman numeral.")
        else:
            raise ValueError("Not a valid/supported Roman numeral.")
(我知道错误不是最好的)

最佳答案

好吧,理论上不应该像您希望的那样使用类型注释 - 这意味着,并非代码中的每个约束都应该由类型注释表示。
现在,要回答您的问题,您当然可以构建自己的类型注释,但这将是,IMO,工作太多而结果太少。
other answers on SO它描述了如何定义自定义注释
您可以随时:

  • 在您的文档字符串中描述您的变量应该是 1 个字符长
  • 进行健全性/验证检查并引发适当的异常。
  • 使用类似 Marshmallow 的东西清理/序列化您的数据
  • 关于python - 如何键入注释字符串的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65521239/

    相关文章:

    Python 3 二进制到十六进制(带填充)

    python-3.x - IPython 自定义完成器的扩展信息

    python - 读取文件并将每一行用作变量?

    python - 大型阵列的优化平均?

    python - 计算数据结构的 md5 哈希

    python - 使用 BPF 过滤器时 python 脚本的 CPU 使用率

    python - 如何根据最高概率从列表中获取值?

    python - 如何将 txt 文件中的数据放入网格中?

    python - Unpickle 二进制文件到文本

    python-3.x - 如何使用 `re.findall`从字符串中提取数据