Python 如何键入字符串的注释长度?
我想对python中只接受单个字符的函数进行类型注释,例如:Python 如何键入字符串的注释长度?,python,python-3.x,Python,Python 3.x,我想对python中只接受单个字符的函数进行类型注释,例如: (s:str)->int 由于Python没有单个字符的类型,因此不能只执行(s:char)->int之类的操作 有没有办法键入s:str只能是一个字符? 在编写代码时,我可以看到这在暗示方面很有用 以下是我的完整示例: 导入Unicode数据 罗马数字查找={“I”:1,“V”:5,“X”:10,…} def精确罗马数字(s:str)->int: “”“返回单个罗马数字的值。不支持多字符罗马数字,如'XII'或撇号。”“” #将Un
(s:str)->int
由于Python没有单个字符的类型,因此不能只执行(s:char)->int
之类的操作
有没有办法键入s:str
只能是一个字符?
在编写代码时,我可以看到这在暗示方面很有用
以下是我的完整示例:
导入Unicode数据
罗马数字查找={“I”:1,“V”:5,“X”:10,…}
def精确罗马数字(s:str)->int:
“”“返回单个罗马数字的值。不支持多字符罗马数字,如'XII'或撇号。”“”
#将Unicode罗马数字转换为其标准化文本版本。e、 g.Ⅹ->X,ⅰ -> 我
s=unicodedata.normalize(“NFKC”,s).upper()
如果是罗马数字查找:
返回罗马数字查找[s]
else:#某种形式的无效值。
如果不存在(s、str):
raise TypeError(“参数的类型必须为str.”)
艾利夫·伦(s)!=1:
raise VALUE ERROR(“必须是单个罗马数字”)
其他:
raise VALUE ERROR(“不是有效/受支持的罗马数字”)
(我知道错误不是最好的)理论上,类型注释不应该像您希望的那样使用-这意味着,代码中的每个约束都不应该用类型注释来表示 现在,为了回答您的问题,您当然可以构建自己的类型注释,但在我看来,这将是太多的工作导致太少的结果 有两种方法描述如何定义自定义注释 您可以在任何时候:
- 在docstring中描述变量的长度应为1个字符
- 进行健全性/有效性检查,并提出适当的异常
- 使用类似的方法清理/序列化数据
tuple[int,int,str]
). 显然,目前没有自定义类型是无法实现的,但是像str[3]
这样的东西对我来说似乎足够简单。像这样的东西是怎么回事?不管怎样,谢谢你的回答。@GoodClover常量泛型和类型泛型是不同的东西,你想要的并不像听起来那么简单。您不能参数化str
,因为它不是通用容器。