如何解决Python类型无法检测到str vs list的不匹配,以pytonic方式接受两者?
来自Java的背景,我对Python的螺栓式类型检查感到非常失望。
from typing import Sequence
def ext(names: Sequence[str] = ()) -> None:
lst = ["aaa","bbb"]
lst.extend(names)
print(lst)
当我不带参数ext()
调用此函数时,它将打印两个元素的预期列表:
['aaa','bbb']
当我像在ext(["c","d"])
中那样传递列表时,也得到了新的扩展列表,也如预期的那样:
['aaa','bbb','c','d']
但是当我传递单个字符串(ext("ccc")
)时,当我希望该字符串成为单个列表元素时,它就会被切成字母:
['aaa','bbb','c','c','c']
我以为各种Python类型检查器都会抓住这一点,但是mypy,pylint和Flake8都没有抱怨。
如何获取类型检查器以检测到这一点?还是我误会了这里的类型提示?
如果我在这里不能依靠类型检查,并且想让函数用户更轻松地接受names
的单个字符串,我该如何在Python中做到这一点?我可以添加类型检查,但这似乎过于冗长和奇怪:
def ext(names: Union[str,Sequence[str]] = []) -> None:
lst = ["aaa","bbb"]
if names:
if type(names) is str:
lst.extend([names])
else:
lst.extend(names)
print(lst)
这是什么pythonic方式?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。