至少有 x 种类型的元组类型

Chr*_*ski 6 python types tuples python-3.x

根据Python Typing的文档,这些是处理元组的文档......

  • Tuple[()]- 空元组
  • Tuple[int, int]- 两个 int 对象的元组
  • Tuple[int, ...]- 任意数量的 int 对象的元组

Tuple我想创建一个至少有 8 秒的类型int 我的目标介于最后两种类型之间(Tuple[int, int]、 和Tuple[int, ...])。

如果元组有...

  • 8 个整数?好的
  • 9 个整数?好的
  • 32 个整数?好的
  • 4 个整数?坏的
  • 1 个整数?坏的

如果 PyCharm 不会发出警告,这是否可能?这是我在下面尝试的。然而,PyCharm 会“错误地”给我关于该assert声明的警告

# Type Alias 
Byte = Tuple[int, int, int, int, int, int, int, int]           # 8 bits
Nibble = Tuple[int, int, int, int]                             # 4 bits

# BytePlus Type is not correct. The following code does not work
BytePlus = Tuple[int, int, int, int, int, int, int, int, ...]  # 8+ bits


def adder(byte1: Union[Byte, BytePlus], byte2: Byte) -> Byte:
    pass

# Incorrect warnings for parameters. 
# What I see...
#    - parameter 1 (Byte | BytePlus) has no warning, but it should. nibble = 4 bits
#    - parameter 2 (Byte) has a warning, good, but it will have a warning for 9 bits
assert adder(nibble(4), nibble(10)) == byte(14)
Run Code Online (Sandbox Code Playgroud)

这是代码nibble()byte()如果您想要...

def byte(number) -> Byte:
    return (
        (number & 128) // 128,
        (number & 64) // 64,
        (number & 32) // 32,
        (number & 16) // 16,
        (number & 8) // 8,
        (number & 4) // 4,
        (number & 2) // 2,
        (number & 1) // 1
    )


def nibble(number) -> Nibble:
    return (
        (number & 8) // 8,
        (number & 4) // 4,
        (number & 2) // 2,
        (number & 1) // 1
    )
Run Code Online (Sandbox Code Playgroud)