【问题标题】:What type-hint contains both list and tuple?什么类型提示同时包含列表和元组?
【发布时间】:2021-03-02 06:00:59
【问题描述】:

我有一个函数可以接受任何可以索引的变量作为输入,例如列表或元组。如何在函数的类型提示中指出这一点?

【问题讨论】:

    标签: python python-3.x type-hinting


    【解决方案1】:

    您的方法接受sequence,因此请使用typing.Sequence。这是通用的,因此您可以指定序列必须包含的对象类型:

    from typing import Sequence
    
    def foo(bar: Sequence[int]):
        # bar is a sequence of integers
    

    引用Python glossary

    一个支持通过__getitem__() 特殊方法使用整数索引进行有效元素访问的可迭代对象,并定义了一个返回序列长度的__len__() 方法。一些内置的序列类型是liststrtuplebytes

    【讨论】:

    • 必须指定序列中项目的类型,还是只能说“bar: sequence”?
    • @ErelSegal-Halevi:不允许指定包含类型;默认是Any,所以bar: Sequencebar: Sequence[Any]是等价的。
    • 是否存在包含listtuple 但不包含strbytes 的类型?还是应该在这种情况下只使用Union[list, tuple]
    • @Nathan:是的,您必须明确说明特定类型。你不能拼写这应该是一个序列,而不是这些特定的序列类型
    • @Nathan:但是请注意,strSequence[str] 类型,如果需要 Sequence[int],则不可接受。反之亦然,bytesSequence[int] 类型,如果您尝试将它与需要 Sequence[str] 的函数一起使用,则会被拒绝。两者都是不可变类型,因此MutableSequence[int]MutableSequence[str] 都不会接受(但bytearray 可以接受MutableSequence[int])。
    猜你喜欢
    • 2014-01-19
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2013-10-13
    相关资源
    最近更新 更多