gpt4 book ai didi

python - 根据输入,在列表上使用 tuple() 不会返回相同的元组

转载 作者:行者123 更新时间:2023-12-05 02:03:02 32 4
gpt4 key购买 nike

我创建了一个类,它的列表属性包含一个 int 和一个 float。然后我尝试创建一个 getter 方法以将列表作为元组返回。

from typing import Tuple, List

class MyClass:
def __init__(self):
self.__lst = [3, 5.0]

def get_lst_as_tup(self) -> Tuple[int, float]:
return tuple(self.__lst)

虽然看起来工作正常,但 PyCharm 出现了一个问题:

预期类型为“Tuple[int, float]”,得到的是“Tuple[Union[int, float], ...]”

在寻找堆栈溢出之后,我尝试了几种其他的 return 语句实现。导致了同样的错误:

return (element for element in self.__lst)

返回元组(self.__lst 中元素的元素)

return (*self.__lst,) 这个特定的实现导致:

预期类型为“Tuple[int, float]”,得到的却是“Tuple[Any]”

我能够通过使用 return self.__lst[0], self.__lst[1]

摆脱错误

但我不明白为什么它不接受其他实现。

注意事项:我没有在文件的其他地方使用元组这个词。即使文件中只有这些内容,也会发生此错误。

最佳答案

以你为例

return (element for element in self.__lst)

我怀疑您是否遇到了同样的错误,因为这实际上返回了一个生成器,不是一个元组。

你的其他尝试

return tuple(self.__lst)
return (*self.__lst,)
return tuple(element for element in self.__lst)

都是将列表 self.__lst 转换为元组的有效方法。当然,最具可读性的是 tuple(self.__lst),所以您应该坚持使用它。

我认为这里建议的类型 Tuple[Union[int, float], ...] 仍然太窄。您正在将可变长度的列表转换为元组。无法知道您的程序中 self.__lst 的长度。考虑一下:

m = MyClass()
m._MyClass__lst.append("hello")
r = m.get_lst_as_tup()
print(r)

输出:(3, 5.0, '你好')

它是 Tuple[int, float, str] 类型。

但是,当您使用 return self.__lst[0], self.__lst[1] 时,可以保证该函数将返回一个长度为 2 的元组(如果列表变得小于长度 2)。

关于python - 根据输入,在列表上使用 tuple() 不会返回相同的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65465441/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com