【发布时间】:2022-01-05 18:15:55
【问题描述】:
我遇到了一个调用函数 f() 的代码:
def f():
return 1, []
a, [] = f()
我想知道为什么作者不使用a, _ = f()。
为什么甚至允许这种语法?
[] = []
a, [] = 444, []
我在哪里可以阅读更多关于[] = [] 哲学的信息?
【问题讨论】:
-
这很奇怪。它不会做任何事情,并且做
a, _ = f()绝对是首选方式。我会非常怀疑您从哪个网站获得此信息。 -
见stackoverflow.com/questions/5182573/…。您可以分配给左侧的多个元素,这通常使用元组完成:
a, b = [1, 2],与(a, b) = [1, 2]相同。您还可以使用左侧的列表语法:[a, b] = [1, 2]。在这里,您正在使用左侧的 0 项列表来执行此操作,而右侧也没有任何项:[] = []因此是有效的。不过,我看不出它有多大用处…… -
[] = []是[a, b, c] = [x, y, z]的简并情况。通常它将 some 值解压缩为 some 名称,但它也可能将无值解压缩为无名称。 -
感谢您的回答。所以基本上,
[] = []性能较差,因为必须构造一个空列表。对吗? -
@TomB。我认为解包通常使用元组完成,因此
()可能比作业左侧的[]更好。与_相比的不同之处在于,如果列表不为空,它将引发异常(ValueError),这可能是您想要的检查。