相关疑难解决方法(0)

为什么分配给空列表而不是空元组是有效的?

这是在最近的PyCon演讲中提出的.

该声明

[] = []
Run Code Online (Sandbox Code Playgroud)

没有任何意义,但它也没有抛出异常.我觉得这一定是因为拆包规则.您也可以使用列表进行元组拆包,例如,

[a, b] = [1, 2]
Run Code Online (Sandbox Code Playgroud)

做你所期望的.作为逻辑结果,当解包的元素数为0时,这也应该有效,这可以解释为什么分配给空列表是有效的.当您尝试将非空列表分配给空列表时会发生什么,这进一步支持了这一理论:

>>> [] = [1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)

如果对于元组也是如此,我会对这个解释感到满意.如果我们可以解压缩到包含0个元素的列表,我们也应该能够解包为具有0个元素的元组,不是吗?然而:

>>> () = ()
  File "<stdin>", line 1
SyntaxError: can't assign to ()
Run Code Online (Sandbox Code Playgroud)

似乎解包规则不适用于元组,因为它们用于列表.我想不出对这种不一致的任何解释.这种行为有原因吗?

python iterable-unpacking

30
推荐指数
2
解决办法
1324
查看次数

如何交换python元组中的成员(a,b)=(b,a)在内部工作?

In [55]: a = 5

In [56]: b = 6

In [57]: (a, b) = (b, a)

In [58]: a
Out[58]: 6

In [59]: b
Out[59]: 5
Run Code Online (Sandbox Code Playgroud)

如何交换a和b的值在内部工作?它肯定不使用临时变量.

python tuples python-internals iterable-unpacking

27
推荐指数
1
解决办法
1万
查看次数

在python中将函数的输出分配给空列表常量

我在我正在使用的代码中找到了类似的东西:

[], my_variable = my_function(a, b)
Run Code Online (Sandbox Code Playgroud)

my_function的输出如下:

return some_dict, some_list
Run Code Online (Sandbox Code Playgroud)

这似乎有效 - 系统的单元测试不会失败,但是当我在python控制台上尝试这个(将字典分配给"[]"时)它会引发:

ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)

你见过这样的东西吗?如何将字典(或其他内容)分配给空列表常量"[]"工作?

或者它没有,测试缺少一些东西......

python function list assign output

5
推荐指数
1
解决办法
107
查看次数

为什么 Python 允许解压空的可迭代对象?

我正在编写一些代码并犯了一个错字,但没有错误。回溯起来,我发现这些工作有效:

>>> [] = []
>>> () = ()
>>> 
Run Code Online (Sandbox Code Playgroud)

这是可迭代的解包,但没有真正的分配目标。为什么 Python 允许这样做?在某些情况下这很有用吗?

这是在语法中定义的地方。我本以为你至少需要一个identifierattributerefsubscriptionslicing,但显然不需要;target_list在圆括号或中括号内是可选的。

target ::=  identifier
            | "(" [target_list] ")"
            | "[" [target_list] "]"
            | attributeref
            | subscription
            | slicing
            | "*" target
Run Code Online (Sandbox Code Playgroud)

查看文档历史,这在最近的Python 3.42.6中是不可能的,但分配到是在Python 3.52.7以及Python 3.6[]添加的。()

有关的:

注意:由于我询问的是设计选择,因此答案应包括对官方文档或核心开发等权威来源的引用。

python variable-assignment iterable-unpacking

3
推荐指数
1
解决办法
239
查看次数