gpt4 book ai didi

元组相乘时的 Python 语法细节

转载 作者:行者123 更新时间:2023-11-28 21:02:34 31 4
gpt4 key购买 nike

我试图创建一个包含两个 float 的元组。 (4.0, 4.0),例如。但是,由于两个 float 相同,所以我写了 4.0, * 2

我想做的可以写成:(4.0,) * 2。在 Python 中,将一个元组乘以一个整数告诉 Python 将元组与自身连接这个次数。所以 (4.0,) * 2 = (4.0,) + (4.0,) = (4.0, 4.0)。好的。

我不想做的是 4.0 * 2(没有逗号)。实际上,这会将 float 4.0 本身乘以 2:4.0 * 2 = 8.0。好的。

但是这些行为都没有发生。而不是 8.0(4.0, 4.0),我得到了一个

TypeError: 'int' object is not iterable

我对这个答案感到非常惊讶。此语法如何导致 2 的迭代(这是此表达式的唯一整数)?

最佳答案

这是优先级问题,混合了错误的运算符(operator)解释。

* (乘法)的优先级高于 , : 4.0, 4.0 * 2 = 4.0, (4.0 * 2) = (4.0, 8.0) .在我的表达中,不能这样理解,因为没有东西可以乘以二:4.0, <nothing> * 2 .由于乘法是一个二元运算符,它的左边必须有一个值,它必须是 4.0,。本身。

这是真的……对于二进制 *运算符(operator)。但是,Python 有一个一元 *运算符,其优先级也高于 , .此一元运算符用于就地扩展可迭代对象。当我们定义或调用具有可变数量参数的函数时,经常会看到这种情况:

def min(first, *others): ...
data = tuple(4, 5, 6, 7)
min(*data)

我的表达式中使用的就是这个运算符。 Python 解释 4.0, * 2作为4.0, (*2) ,它说“一个元组,包含4.0作为第一个元素,然后是 2 中包含的所有元素”。实际上,一个整数是不可迭代的,Python 会提示它。

作为证明,我们可以计算这个表达式,它实际上给出了 * 的可迭代对象。一元运算符:

>>> 4.0 , * ( 5.0 , 6.0 )  # equivalent of  (4.0, (*(5.0, 6.0)))
(4.0, 5.0, 6.0)

关于元组相乘时的 Python 语法细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47834142/

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