如何在Python中使用星形表达式来解包?
更多Python相关文章,请阅读:Python 教程
介绍
解包的基本限制之一是您必须提前知道要解包的序列的长度。
如何解决..
输出
如果现在我想从数字中找到最大的和第二大的,我们会得到一个异常“too many values to unpack”(要解包的值过多)。
输出
Python经常依赖索引和切片。例如,当我想从下面的项目列表中提取最大的和第二大的时,我们可以这样做。
输出
输出
输出
虽然这种方法是可行的,但是所有的索引和切片都会产生视觉上的噪音。实际上,把一个序列分成各种子集这种方法容易出错。
为了做得更好,Python支持通过星号表达式进行捕获解包。
这种星号语法允许解包赋值的一部分接收不匹配解包模式的所有值。
输出
上面的代码怎么样?在一行中,也更容易阅读,我们就可以获取输出。星形表达式可以出现在任何位置,因此您可以在需要提取一种片段时获得获取所有解包的好处。
但是,要解包包含星号表达式的赋值,必须至少有一个必需的部分,否则您将收到SyntaxError。我们不能单独使用catch-all表达式。
我们还不能在单层解包模式中使用多个通配符表达式。这是另一个需要考虑的重要提示。
但是在解包赋值语句中可以使用多个星号表达式,只要它们是解包多层结构的不同部分的通配符即可。
输出
在所有情况下,星号表达式都会变成列表实例。如果从解包的序列中没有剩余的项,则通配符部分将是空列表。当您处理预先知道至少有N个元素的序列时,这是非常有用的。