gpt4 book ai didi

python - 为什么在 Python 中解包会给出一个列表而不是一个元组?

转载 作者:行者123 更新时间:2023-12-03 14:15:08 25 4
gpt4 key购买 nike

这对我来说真的很奇怪,因为默认情况下我认为解包会给出元组。

就我而言,我想使用 prefix用于缓存的键,因此首选元组。

# The r.h.s is a tuple, equivalent to (True, True, 100)
*prefix, seed = ml_logger.get_parameters("Args.attn", "Args.memory_gate", "Args.seed")
assert type(prefix) is list

但我认为解包会返回一个元组。

这是相关的 PEP: https://www.python.org/dev/peps/pep-3132/

- 更新 -

鉴于下面的评论和答案,特别是我期望解包给出一个元组,因为在函数参数中,展开 arg 始终是一个元组而不是列表。

正如 Jason 指出的那样,在解包过程中,人们无法提前知道结果的长度,因此在实现方面,包罗万象必须从动态附加列表开始。大多数情况下,将其转换为列表是浪费精力。

从语义上讲,我更喜欢有一个元组来保持一致性。

最佳答案

这个问题是 mentioned in that PEP (PEP 3132):

After a short discussion on the python-3000 list [1], the PEP was accepted by Guido in its current form. Possible changes discussed were: [...]

  • Try to give the starred target the same type as the source iterable, for example, b in a, *b = 'hello' would be assigned the string 'ello'. This may seem nice, but is impossible to get right consistently with all iterables.

  • Make the starred target a tuple instead of a list. This would be consistent with a function's *args, but make further processing of the result harder.


但如您所见,这些功能目前尚未实现:
In [1]: a, *b, c = 'Hello!'
In [2]: print(a, b, c)
H ['e', 'l', 'l', 'o'] !
也许,可变列表更适合这种类型的解包。

关于python - 为什么在 Python 中解包会给出一个列表而不是一个元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61428816/

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