当前位置: 首页 > 面试题库 >

赋值语句左侧和右侧的星号*运算符

闻人冷勋
2023-03-14
问题内容

这个问题源于PEP 448-其他解包概述,据我所知,它存在于Python
3.5中(并且没有反向移植到2.x)。具体来说,在“ 缺点 ”部分中,注意以下几点:

虽然*elements, = iterable原因elements是一listelements = *iterable,原因elements是一个tuple。这样做的原因可能会使不熟悉该结构的人感到困惑。

对于iterable = [1, 2, 3, 4]第一种情况,确实确实存在list

>>> *elements, = iterable
>>> elements
[1, 2, 3, 4]

在第二种情况下tuple,创建了:

>>> elements = *iterable,
>>> elements
(1, 2, 3, 4)

不熟悉这个概念,我很困惑。谁能解释这种行为?加星标的表情是否会根据其所在的侧面而有所不同?


问题答案:

当还考虑了扩展包装的初始PEP时,将解释这两种情况之间的区别:PEP 3132 -- Extended iterable unpacking

在该PEP的摘要中,我们可以看到:

该PEP提议对可迭代的解包语法进行更改,从而允许指定“全包”名称,该名称 将被分配 所有未分配给“常规”名称的项目 的列表

(强调我的)

因此,在第一种情况下执行后:

*elements, = iterable

elements总是将list包含内所有项目的iterable

即使在两种情况下看起来都相似,*在这种情况下(左侧)也意味着:捕获未分配给名称的所有内容并将其分配给加星号的表达式。它的工作原理类似的方式作为*args**kwargs在做的
函数定义

def spam(*args, **kwargs): 
    """ args and kwargs group positional and keywords respectively """

第二种情况(右侧)有些不同 。在这里,我们没有*像通常在 函数调用中
那样以“全部捕获”方式进行工作。它扩展了附加的可迭代对象的内容。因此,该语句:

elements = *iterable,

可以视为:

elements = 1, 2, 3, 4,

这是atuple初始化的另一种方式。

请注意,list可以通过简单使用创建一个elements = [*iterable],它将解压缩iterablein的内容[]并导致对form的赋值elements = [1, 2, 3, 4]



 类似资料:
  • 问题内容: 我开始使用pl / sql开发Oracle运算符。指南中有一些示例,但现在我继续介绍。 在我所看到的所有示例中,始终都是这样的: 我们在子句中这样使用它: 是否可以创建一个像左侧和右侧一样使用的运算符? 在这种情况下: 谢谢你的帮助。 编辑:我知道它可以与PostgreSQL,但没有找到Oracle http://www.postgresql.org/docs/current/stat

  • 问题内容: 任何方法都可以在左右两侧(水平?)获得箱形阴影,而没有任何骇客或图像。我在用: 但它给周围的阴影。 我周围没有边界。 问题答案: 注意: 我建议您在下面查看@Hamish的答案;它不涉及此处描述的解决方案中不完善的“掩盖”。 您可以使用多个框阴影来接近;每一面一个 编辑 在顶部和底部的顶部再添加2个阴影,以遮盖流血的阴影。

  • 作为我的第一个Java项目,我正在尝试制作一个定位不同城市的小程序。 我想从“City”类访问我的类“GPS”的变量,但我一直遇到这样的错误:作业的左侧必须是变量。任何人都可以向我解释我在这里做错了什么,以及今后如何避免这种错误? (我想把变量作为私有) 这个类“City”应该有坐标:

  • 这里有一个关于使用方法关闭一组轴给定侧的刻度的问题。我想更改和属性在默认情况下关闭在我的,但我不知道如何做到这一点,作为文件的刻度部分处理在和方面的东西。我错过了什么?

  • 我的问题是:如何确定已拆分的旋转矩形几何体的和是拆分该几何体的任意的“左”和“右”边? 对于这个问题,"左"和"右"被定义为从节点到节点"行走"时,按顺序的拆分器的左边和右边。 我创建了此函数,用于将任意几何体(非集合)拆分为两个面——“左”和“右”: 上面的想法在此处链接的笔记本中进行了说明(与上面的链接相同): http://nbviewer.jupyter.org/urls/dl.dropb

  • 问题内容: 以任何方式在左侧和右侧(水平?)上获得盒子阴影,而没有骇客或图像。我在用: 但它给周围的阴影。 我周围没有边界。 问题答案: 注意: 我建议在下面查看@Hamish的答案;它不涉及此处所述解决方案中不完善的“掩盖”。 您可以使用多个框阴影来接近;每一侧一个 编辑 在顶部和底部的顶部再添加2个阴影,以掩盖流血的阴影。