微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python类型无法检测到str vs list的不匹配,以pytonic方式接受两者?

如何解决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 举报,一经查实,本站将立刻删除。