我想在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.")
(我知道错误不是最好的)
2条答案
按热度按时间i34xakig1#
从理论上讲,类型注解不应该像您希望的那样使用,也就是说,代码中的每个约束都不应该用类型注解来表示。
现在,为了回答您的问题,您当然可以构建自己的类型注解,但是,我认为,这样做工作量太大,结果太少。
other answers on SO描述了如何定义自定义注解
您可以随时:
vngu2lb82#
我认为你可以使用
Literal[]
,像Literal['I','V','X',...]
这样的内部键,它会占用更多的字符,但我认为它很好,如果你懒得输入,你可以使用列表解包,像Literal[*keys]